一定要注意后面的分号(注意,下面的mysql>不是命令,只是一个提示)
MySQL客户端连接服务端时的完整指令
mysql -h 127.0.0.1 -P 3306 -uroot -p
查看当前用户
mysql> select user();
查看字符集编码的指令
mysql> show variables like "%char%";
刷新缓存,修改密码什么的让其立刻生效
mysql> flush privileges;
给账号修改密码
mysql> set password for 用户名@localhost = password('新密码');
例子
mysql> set password for root@localhost = password('123');
查看存储引擎
mysql> show engines;
查看数据库
mysql> show databases;
创建数据库
mysql> create database db1;
创建数据库并指定编码
mysql> create database db1 charset utf8;
修改数据库
mysql> alter database db1 character set utf8
查看数据结构
mysql> desc db1;
使用数据库
mysql> use db1;
创建表
mysql> create table t1(id int(10),name char(10));
查看表
mysql> show tables;
查看表的信息
mysql> show create table t1;
mysql> show create table t1\G;
查看表结构
mysql> desc t1;
修改表的数据类型
mysql> alter table class modify name char(16);
修改表的字段名和数据类型
mysql> alter table class change class_name name char(18);
增
mysql> insert into t1 values(1,'admin'),(2,'password');
mysql> insert into class3 select * from class;
mysql> insert into class3(id,name) select id,name from class;
删(删除表里的全部数据)
mysql> delete from test;
删表
mysql> drop table test;
删库
mysql> drop database test;
改
mysql> update test set name='test1' where id=3;
查
mysql> select * from t1;
约束
not null 不为空
mysql> create table t1(name char(10) not null);
default 默认值
mysql> create table t2(name char(10) default 'xx');
unique 唯一 联合唯一 unique(ip,port)
mysql> create table t1(name char(10) unique);
auto_increment 自增 至少需要设置unique才能设置auto_increment 自带not null 不受删除影响,记录增加过的值,失败也算
mysql> create table t1(id int primary key auto_increment);
设置步长
sqlserver:自增步长
基于表级别
create table t1(
id int...
)engine=innodb,auto_increment=2 步长=2 default charset=utf8
mysql自增的步长:
show session variables like 'auto_inc%';
基于会话级别
set session auth_increment_increment=2 #修改会话级别的步长
基于全局级别的
set global auth_increment_increment=2 #修改全局级别的步长(所有会话都生效)
!!!注意了注意了注意了!!!
If the value of auto_increment_offset is greater than that of auto_increment_increment, the value of auto_increment_offset is ignored.
翻译:如果auto_increment_offset的值大于auto_increment_increment的值,则auto_increment_offset的值会被忽略
比如:设置auto_increment_offset=3,auto_increment_increment=2
truncate 清空表
mysql> truncate test1;
直接清空表,里面auto_increment自增也会被清空,表结构不变
primary key 主键 约束效果:不为空且唯一 not null + unique 一张表只能有一个主键,联合主键
mysql> create table t1(id int primary key);
foreign key 外键 级联更新 on update cascade 级联删除 on delete cascade
增加外键一定要确定外键表存在 publish要比book先创建
mysql> create table publish(
id int purimary key,
name char(10) not null
);
mysql> create table book(
id int primary key,
name char(10),
pid int,
foreign key(pid) references publish(id)
);
查看所有外键的名称的方法:
select REFERENCED_TABLE_SCHEMA,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME,table_name,CONSTRAINT_NAME from information_schema.key_column_usage;
包含我们创建外键的时候,mysql帮我们自动生成的外键名称。
外键约束有三种约束模式(都是针对父表的约束):
-
模式一: district 严格约束(默认的 ),父表不能删除或者更新已经被子表数据引用的记录
-
模式二:cascade 级联模式:父表的操作,对应的子表关联的数据也跟着操作 。
-
模式三:set null:置空模式,父表操作之后,子表对应的数据(外键字段)也跟着被置空。
通常的一个合理的约束模式是:删除的时候子表置空;更新的时候子表级联。
指定模式的语法:foreign key(外键字段)references 父表(主键字段)on delete 模式 on update 模式;
注意:删除置空的前提条件是 外键字段允许为空,不然外键会创建失败。
外键虽然很强大,能够进行各种约束,但是外键的约束降低了数据的可控性和可拓展性。通常在实际开发时,很少使用外键来约束。
高级命令
权限管理
创建用户:
# 指定ip:192.168.1.12的admin用户登录
create user 'admin'@'192.168.1.12' identified by '123';
# 指定ip:192.168.118.开头的admin用户登录
118网段下面的计算机都可以连接这个数据库
create user ‘admin'@'192.168.118.%' identified by '123';
删除用户
drop user '用户名'@'IP地址';
修改用户
rename user '用户名'@'IP地址' to '新用户名'@'IP地址';
修改密码
set password for '用户名'@'IP地址'=Password('新密码');
对当前的用户授权管理
查看权限
show grants for '用户'@'IP地址';
授权 admin用户仅对db1.t1文件有查询、插入和更新的操作
grant select,insert,update on db1.t1 to 'admin'@'%';
表示有所有的权限,除了grant这个命令,这个命令是root才有的。admin用户对db1下的t1文件有任意操作
grant all privileges on db1.t1 to 'admin'@'%';
用户admin对db1数据库中的文件执行任何操作
grant all privileges on db1.* to 'admin'@'%';
用户admin对所有数据库中的文件有任何操作
grant all privileges on *.* to 'admin'@'%';
取消权限
取消admin用户对db1的t1文件的任意操作
revoke all on db1.t1 from 'admin'@'%';
取消来自远程服务器的admin用户对数据看db1的所有表的所有权限
revoke all on db1.* from 'admin'@'%';
取消来自远程服务器的admin用户所有数据库的所有的表的权限
revoke all on *.* from 'admin'@'%';
修改密码的三种方式
1.SET PASSWORD 命令
set password for root@localhost = password('123');
2. mysqladmin
mysqladmin -u用户名 -p旧密码 password 123
mysqladmin -uroot -p123456 password 123
3. UPDATE 直接修改mysql库中的user表
use mysql
update user set password=password('123') where user='root' and host='localhost';
其中password=password('123') 前面的password是变量,后面的password是mysql提供的给密码加密用的
mysql忘了密码怎么办?
1. 停掉Mysql服务端(net stop mysql) -- 管理员模式的cmd
2. cmd中切换到MYSQL安装目录下的bin目录下, 执行:
mysql.exe --skip-grant-tables
3. 重新启动一个窗口,连接mysql服务端
4. 修改mysql库里面的user表里面的root用户记录的密码:
update user set password=password('666') where user='root';
5. 关掉mysqld服务端,指令:
tasklist|findstr mysqld
taskkill /F /PID 进程号
6. 正常启动服务端(net start mysql)