一、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 位类型测试
位类型测试

相关文章: