一、mysql的sql语言分类
SQL语言一共分为4大类:
数据定义语言DDL,
数据操纵语言DML,
数据查询语言DQL,
数据控制语言DCL.
1.数据定义语言DDL (对象是:数据库和表)
#数据库相关操作
关键词: create alter drop truncate(删除当前表再新建一个一模一样的表结构)
查看数据库:show databases; #查看数据库详细信息 show create database school \G; 增加数据库:create database school; 删除数据库:drop database school; 切换数据库:use school; 查看数据库里存在的表:show tables;
该数据库编码: alter database school charset utf8;
2.数据操纵语言DML(Data Manipulation Language)
#记录相关操作 对象:纪录(行) 关键词:insert update delete 插入:insert into student values(01,'tonbby',99); (插入所有的字段) insert into student(id,name) values(01,'tonbby'); (插入指定的字段) 更新:update student set name = 'tonbby',score = '99' where id = 01; 删除:delete from tonbby where id = 01;
注意: 开发中很少使用delete,删除有物理删除和逻辑删除,其中逻辑删除可以通过给表添加一个字段(isDel),若值为1,代表删除;
若值为0,代表没有删除。此时,对数据的删除操作就变成了update操作了。
truncate和delete的区别: truncate是删除表,再重新创建这个表。属于DDL,delete是一条一条删除表中的数据,属于DML。
3.数据查询语言DQL(Data Query Language)
select ... from student where 条件 group by 分组字段 having 条件 order by 排序字段 执行顺序:from->where->group by->having->order by->select 注意:group by 通常和聚合函数(avg(),count()...)一起使用 ,经常先使用group by关键字进行分组,然后再进行集合运算。 group by与having 一起使用,可以限制输出的结果,只有满足条件表达式的结果才会显示。
having和where的区别: 两者起作用的地方不一样,where作用于表或视图,是表和视图的查询条件。having作用于分组后的记录,用于选择满足条件的组
4.数据控制语言DCL(Data Control Language)
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视,用户,权限,事务等。
grant:授权,rollback:回滚。commit:提交。
创建数据库共享用户
#进入mysql客户端
$mysql
mysql> select user(); #查看当前用户
mysql> exit # 也可以用\q quit退出
# 默认用户登陆之后并没有实际操作的权限
# 需要使用管理员root用户登陆
$ mysql -uroot -p # mysql5.6默认是没有密码的
#遇到password直接按回车键
mysql> set password = password('root'); # 给当前数据库设置密码
# 创建账号
mysql> create user 'eva'@'192.168.10.%' IDENTIFIED BY '123';# 创建用户并指定IP段
mysql> create user 'eva'@'192.168.10.5' # 指示某机器可以连接
mysql> create user 'eva'@'%' #指示所有机器都可以连接
mysql> show grants for 'eva'@'192.168.10.5';查看某个用户的权限
# 远程登陆
$ mysql -uroot -p123 -h 192.168.10.3
# 给账号授权
mysql> grant all on *.* to 'eva'@'%';
mysql> flush privileges; # 刷新使授权立即生效
# 创建账号并授权
mysql> grant all on *.* to 'eva'@'%' identified by '123'
#删除授权的账号
Delete from mysql.user where user = "user_name" and host = "host_name" ;
host:是IP地址,uer是用户名.
#查看都有哪些授权用户:
SELECT DISTINCT CONCAT('User:',user,'@',host,';') AS query FROM mysql.user;
查看mysql是否为严格模式:
select @@sql_mode;
#导入sql文件:
source 文件绝对路径
二、关于库的操作:
什么是mysql库:
就是在mysql\data下的目录
创建数据库语法: create database 数据库名 charset utf8; 数据库命名规则: 1.可以由字母、数字、下划线、@、#、$ 2.区分大小写 3.唯一性 4.不能使用关键字如 create select 5.不能单独使用数字 6.最长128位 # 基本上跟python或者js的命名规则一样
关于库的操作指令:
1 查看数据库 show databases;
show create database 数据库\G; #查看详细信息
2 创建数据库 create database db1 charset utf8;
3 选择数据库 USE 数据库名 4 删除数据库 DROP DATABASE 数据库名; 5 修改数据库 alter database db1 charset utf8;
三、基础数值类型
介绍:
存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的
类型概览:
1.数值类型
2.字符串类型
3.时间类型
4.枚举与集合类型
数值类型
数值类型:整数,浮点数,位类型 作用:存储年龄,等级,id,各种号码等 #unsigned 无符号 #zerofoll 使用0填充
#在严格模式下,字段类型为无符号的整数,若输入的内容为负数或者超出存储范围,将报错;反之,会将负数改为0,超范围的值,按最大范围存储
整数类型:tinyint,int,bigint,SMALLINT,MEDIUMINT tinyint(m) unsigned zerofill 小整数,数据类型用于保存一些范围的整数数值范围: 有符号: -128 ~ 127 无符号:0 ~ 255 int(m) unsigned zerofill 整数,数据类型用于保存一些范围的整数数值范围: 有符号:-2147483648 ~ 2147483647 无符号:0 ~ 4294967295 bigint(m) unsigned zerofill 大整数,数据类型用于保存一些范围的整数数值范围: 有符号:-9223372036854775808 ~ 9223372036854775807 无符号:0 ~ 18446744073709551615
1.设置无符号int create table t4(x int unsigned); insert into t4 values(-1),(0),(4294967295),(4294967296); select * from t4; 2.用zerofill测试整数类型的显示宽度 create table t5(x int(3) zerofill); #int(3) 表示的是显示宽度,不够3位用0补齐 insert into t5 values(1),(11),(110001),(1111111); 注意 对于整型来说,数据类型后面的宽度并不是存储长度限制,而是显示限制,假如:int(8),那么显示时不够8位则用0来填充,够8位则正常显示,
通过zerofill来测试,存储长度还是int的4个字节长度
浮点数
定点数类型 dec,等同于decimal
浮点类型:float(m,d) #m 是总的位数,d 是小数部分位数 double(m,d) decimal(m,d)
作用:存储薪资、身高、温度、体重、体质参数等
1.FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] #单精度浮点数(非准确小数值),m是整数部分+小数部分的总个数,d是小数点后个数。m最大值为255,d最大值为30,例如:float(255,30) 精确度: 随着小数的增多,精度变得不准确 2.DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 双精度浮点数(非准确小数值),m是整数部分+小数部分的总个数,d是小数点后个数。m最大值也为255,d最大值也为30 精确度: 随着小数的增多,精度比float要高,但也会变得不准确 3.decimal[(m[,d])] [unsigned] [zerofill] 准确的小数值,m是整数部分+小数部分的总个数(负号不算),d是小数点后个数。 m最大值为65,d最大值为30。比float和double的整数个数少,但是小数位数都是30位 精确度:随着小数的增多,精度始终准确 注意 精度从高到低:decimal、double、float decimal精度高,但是整数位数少 float和double精度低,但是整数位数多
位类型
BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位。
注意:
对于位字段需要使用函数读取
bin()显示为二进制
hex()显示为十六进制
1 mysql> create table t9(id bit); 2 mysql> desc t9; #bit默认宽度为1 3 +-------+--------+------+-----+---------+-------+ 4 | Field | Type | Null | Key | Default | Extra | 5 +-------+--------+------+-----+---------+-------+ 6 | id | bit(1) | YES | | NULL | | 7 +-------+--------+------+-----+---------+-------+ 8 9 mysql> insert into t9 values(8); 10 mysql> select * from t9; #直接查看是无法显示二进制位的 11 +------+ 12 | id | 13 +------+ 14 | | 15 +------+ 16 mysql> select bin(id),hex(id) from t9; #需要转换才能看到 17 +---------+---------+ 18 | bin(id) | hex(id) | 19 +---------+---------+ 20 | 1 | 1 | 21 +---------+---------+ 22 23 mysql> alter table t9 modify id bit(5); 24 mysql> insert into t9 values(8); 25 mysql> select bin(id),hex(id) from t9; 26 +---------+---------+ 27 | bin(id) | hex(id) | 28 +---------+---------+ 29 | 1 | 1 | 30 | 1000 | 8 | 31 +---------+---------+ 32 33 位类型测试