Mysql基础语句

一定要注意后面的分号(注意,下面的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帮我们自动生成的外键名称。

外键约束三种约束模式(都是针对父表的约束):

  1. 模式一: district 严格约束(默认的 ),父表不能删除或者更新已经被子表数据引用的记录

  2. 模式二:cascade 级联模式:父表的操作,对应的子表关联的数据也跟着操作 。

  3. 模式三: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)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值