初识mysql(一)
所有实验基于最小化安装的OpenEuler操作系,且已关闭防火墙和selinux
安装mysql并启动
yum -y install mysql-server
systemctl start mysqld
mysql#登录mysql
常用管理命令
- mysql
mysql [options] db_name
-u: 指定用户密码
-p:指定用户登录数据的IP或域名
-h:指定登录数据库的IP
-P:指定登录端数据库的端口号
-e:能够在终端执行数据库指令
# 查看mysql所有用户信息
mysql -uroot -hlocalhost -P3306 -e'select * from user\G' mysql
- mysqladmin
mysqladmin [options] command [command-arg] [command [command-arg]] ...
# 设置root用户密码
mysqladmin -uroot password '123456'
mysql -uroot -p123456 -h127.0.0.1 -P3306
默认数据库
- information_schema :信息数据库,存储所有的库、表、列的名称,任意可登录数据库的用户都可读
- mysql :主数据库,mysqld运行的必须数据库,用户与配置信息
- performance_schema:性能数据库,存储mysqld的资源使用、安全策略权限配置信息
SQL语言
- MySQL语句特点
- 不区分大小写。
- 建议对命令用大写,非命令用小写方便区别。
- 区分数据库、数据管理系统、sql语句操作
- 分类
- DDL(Data Definition Language)数据定义语言
- DML(Data Manipulation Language)数据操作语言
- DQL(Data Query Language)数据查询语言
- DCL(Data Control Language)数据控制语言
1.DDL
#数据库操作 []内内容可选
SHOW DATABASES; #查询所有数据库
SELECT DATABASE(); #查询当前数据库
CREATE DATABASE [IF NOT EXISTS] databasename [DEFAULT CHARSET utf8mb4];#创建数据库字字符集utf8mb4支持4字节
DROP DATABASE [IF EXISTS] databasename;#删除数据库
USE databasename; #使用databasename,对databasename数据库进行操作#表操作 在使用某个数据库后在做以下操作
CREATE TABLE tablename(字段1 字段1类型 [COMMENT 字段1注释];...字段n 字段n类型 [COMMENT 字段n注释];
)[COMMENT 表注释];
SHOW TABLES;#查询所有表
DESC tablename;#查询表结构
DESCRIBE tablename;#查询表结构
SHOW CREATE TABLE tablename;#查询指定表的建表语句
ALTER TABLE <表名> [修改选项]
## 常见修改选项
ADD COLUMN <列名> <类型>#新增字段
CHANGE COLUMN <旧列名> <新列名> <新列类型>#改变字段
ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }#更新字段
MODIFY COLUMN <列名> <类型>#修改字段
DROP COLUMN <列名>#删除字段
RENAME TO <新表名>#重命名字段
CHARACTER SET <字符集名>#设置字符集
COLLATE <校对规则名> DROP TABLE [IF EXISTS] tablename;#删除某个表
TRUNCATE TABLE tablename; #删除表后重建
创建表常用字段数据类型:
- 数值类型
TYPE | SIZE(bytes) | SIGNED | UNSIGNED | COMMENT |
---|---|---|---|---|
TINYINT | 1 | -128-127 | 0-255 | 小整数数值 |
SMALLINT | 2 | -32768-32767 | 0-65535 | 大整数值 |
MEDIUMINT | 3 | 大整数值 | ||
INT/INTEGER | 4 | 大整数值 | ||
BIGINT | 8 | 极大整数值 | ||
FLOAT | 4 | 单精度浮点数 | ||
DOUBLE | 8 | 双精度浮点数 | ||
DECIMAL | 依赖与M,D的值 | 小数值,精确定点数 |
- 字符串类型
TYPE | SIZE | COMMENT |
---|---|---|
CHAR | 0-255 | 定长字符串 |
VARCHAR | 0-65535 | 变长字符串 |
TINYBLOB | 0-255 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 | 短文本字符串 |
BLOB | 0-65 535 | 二进制形式的长文本数据 |
TEXT | 0-65 535 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 | 极大文本数据 |
- 时间日期类型
TYPE | SIZE(bytes) | SPAN | FORMAT | COMMANT |
---|---|---|---|---|
DATE | 3 | 1000-10-01 to 999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | -838:59:59 to 838:59:59 | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901 to 2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00 to 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:01 to 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
2.DML语句
#在USE databasename;之后使用
1.INSERT#插入
INSERT INTO tablename(字段1,...,字段n) VALUES (值1,...,值n)#按字段将数据插入表中
INSERT INTO tablename VALUES(value1,...,valuen)#按整表插入数据
INSERt INTO tablename(字段1,...,字段n) VALUES (值1,...,值n)(值1,...,值n)...;#一次插入多行
2.UPDATE#更新
UPDATE tablename SET 字段1=值1 字段2=值2... [WHERE condtions];#没有where条件时就是更新所有表的数据
3.DELETE#删除
DELETE FROM tablename [WHERE conditions];#删除一条或多条记录,不带条件时删除表中所有记录
3.DQL语句
#After USE databasename;
SELECT col1 [AS cname1],col2 [AS cname2],...
FROM tb [AS tname]
[WHERE condtions]
[GROUP BY col [HAVING condtions]]
[ORDER BY [col] ASC 或者 DESC]#升序(默认) 降序
[LIMIT indexnum,recordnum];#indexnum从0开始 indexnum=(pagenum-1)*recordnumSELECT DISTINCT columes1,colume2,... FROM tablename...;#去重
where条件
- 判断条件: >,>=,<,<=,!=or<>,BETWEEN a AND b(a<b),IN (value1,value2,…),LIKE pattern “_%”
- 逻辑条件: AND &&, OR ||, NOT !.
聚合函数
- count()计数值
- avg()平均值
- max()最大值
- min()最小值
- sum()求和
注意:
- WHERE条件不能使用聚合函数
- 执行顺序:FORM>WHERE>GROUPE BY HAVING>SELECT>ORDERBY>LIMIT
4.DCL语句
USE mysql;
SELECT * FROM use;
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';#创建新用户
ALTER USER 'username'@'hostname' IDENTIFIED WITH mysql_native_password BY 'nwepassword';#更新用户密码
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
DROP USER 'username'@'hostname';#Delete user
#权限控制
SHOW GRANTS FOR 'username'@'hostname';#查看指定用户所有权限
GRANT Permission1,Permission2,... ON databasename TO 'username'@'hostname';#授权
REVOKE Permission1,Permission2,... ON databasename TO 'username'@'hostname';#撤销权限
- mysql的权限
在MySQL中,权限控制是通过Grant和Revoke命令来管理用户和角色的权限的。
- Alter:修改。允许用户修改数据库中的表结构。
- Alter routine:修改存储过程或函数。允许用户修改已创建的存储过程或函数。
- Create:创建。允许用户创建新的数据库对象,如表、视图、存储过程等。
- Create routine:创建存储过程或函数。允许用户创建新的存储过程或函数。
- Create temporary tables:创建临时表。允许用户创建临时表,这些表在会话结束时会自动删除。
- Create view:创建视图。允许用户创建新的视图。
- Create user:创建用户。允许用户创建新的数据库用户账户。
- Delete:删除。允许用户删除表中的数据。
- Drop:删除。允许用户删除数据库中的对象,如表、视图等。
- Event:事件。允许用户管理和修改事件调度器中的事件。
- Execute:执行。允许用户执行存储过程或函数。
- File:文件。允许用户访问数据库服务器的文件系统。
- Grant option:授予选项。允许用户将权限授予其他用户。
- Index:索引。允许用户在表上创建、修改或删除索引。
- Insert:插入。允许用户向表中插入数据。
- Lock tables:锁定表。允许用户锁定数据库中的表,以防止其他用户同时访问这些表。
- Process:进程。允许查看或杀死数据库服务器上的进程。
- Proxy:代理。允许用户作为代理登录,代表其他用户执行操作。
- References:引用。允许用户创建外键约束。
- Reload:重新加载。允许用户重新加载配置文件或刷新权限表。
- Replication client:复制客户端。允许用户从主服务器接收数据以进行复制。
- Replication slave:复制从机。允许用户作为数据复制的从服务器。
- Select:选择。允许用户查询表中的数据。
- Show databases:显示数据库。允许用户查看用的数据库列表。
- Show view:显示视图。允许用户查看数据库中的视图定义。
- Shutdown:关闭。允许用户关闭数据库服务器。
- Super:超级。允许用户所有的权限,并且可以不受限制地执行许多系统命令。
- Trigger:触发器。允许用户创建触发器,以在特定事件发生时自动执行代码。
- Create tablespace:创建表空间。允许用户创建新的表空间,用于存储数据库对象。
- Update:更新。允许用户更新表中的数据。
- Usage:使用。这个权限通常用于限制用户只能查看自己的权限,不能进行任何实际的数据库操作。
常用数据库操作命令
show databases; # 查看数据库
select database();# 查看所在数据库
select user(); #查看当前登录用户
select version(); #查看当前数据库版本
show privileges[\G];#查看用户权限列表
show grants for root@localhost\G;#查看指定用户的权限
use databasename[;] #切换数据库
操作案例
- 案例一 创建数据库、创建表、修改表字段结构
create database if not exists test;
use test
create table stu_score(id tinyint, name varchar(50), score decimal(4,2), object varchar(50));
alter table stu_score rename to stuS;
alter table stuS modify id int;
alter table stuS modify id int primary key;
alter table stuS modify id int auto_increment;
alter table stuS modify id int;
alter table stuS change column object subject varchar(50);
alter table stuS modify column name varchar(50) not null default "未知";
alter table stuS add column extra text;
alter table stuS add i int first;
alter table stuS add sex varchar(10) after name;
alter table stuS drop id;
show tables;
desc stuS;