数据库练习笔记(linux 环境,5.7版本)

INT[(M)] [UNSIGNED] [ZEROFILL] M默认为11
普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295
注意:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。
其实当我们在选择使用int的类型的时候,不论是int(3)还是int(11),它在数据库里面存储的都是4个字节的长度,在使用int(3)的时候如果你输入的是10,会默认给你存储位010,也就是说这个3代表的是默认的一个长度,当你不足3位时,会帮你不全,当你超过3位时,就没有任何的影响

数值类型:
TINYINT 1 字节
SMALLINT 2 个字节
MEDIUMINT 3 个字节
INT 4 个字节
INTEGER 4 个字节
BIGINT 8 个字节

char:定长字符串,需要一个大小修饰符来指定要存储的值的长度,修饰符的范围是0-255
char(3)每次产生三个存储空间,修饰符大小只要小于三,无论多大都占三个存储空间,大于三个则报错。
varchar:变长字符串,范围是0-65535(一个汉字为两个字符,差不多能存3万多个汉字)
varchar(3) 每次先计算修饰符大小再产生存储空间,一个修饰符则用一个空间,两个用两个,多于3个则报错。
在检索的时候,CHAR列删除了尾部的空格,而VARCHAR则保留这些空格
枚举类型: ENUM
create table fuhe(sex enum(‘M’,’W’))
集合类型: SET
create table fuhe2(kind set (‘a’,’b’,’c’,’d’,’f’));

属性:
unsigned 无符号
PRIMARY KEY 主键
NOT NULL不允许为空
DEFAULT “值” 设置字段的默认值
UNIQUE KEY (UK) 标识该字段的值是唯一的,是一种索引,可以为空,一个表中可以有多个
zerofill等位补齐:使用zerofill创建表时默认为无符号AUTO_INCREMENT 自动增长, 必须与主键、不允许为空同时使用
AUTO_INCREMENT 自动增长从表中最大的数值开始,只适用于int字段
datetime和timestamp
datetime 不会自动更新,插入值为多少就是多少,插入为空会改为空。
timestamp 插入值为空时会自动更新为当前时间,若修改与之相对应的行的某一字段时,会更新为当前修改的时间。
添加索引:
mysql> create table t15(id int not null,name char(10),index(id));
mysql> create index t16_id on t16 (id);
mysql> alter table t16 add index(id);
查询索引
mysql> show index from t16;
mysql> show index from t16\G
删除索引
mysql> drop index t16_id on t16;
mysql> drop index t16_name on t16;
PRIMARY KEY 主键约束 值唯一非空 unique和not null的结合(若对一个字段同时设置了非空和唯一,则此字段为主建),一个表中只有一个主键,但是一个主键可以作用在多个列上。
创建主键
mysql> create table t18(id int,name char(10),constraint pk_id primary key(id));
mysql> create table t18(id int primary key,name char(10));
查询
mysql> desc t18; (desc看表结构)

修改表名
mysql> rename table 旧表名 to 新表名 ;
增加字段
mysql> alter table new17 add age int(3) not null default 22,add sex enum(‘M’,’W’);
删除字段
ALTER TABLE 表名 DROP 字段名;
修改字段类型modify
alter table t1 modify age int(10) not null primary key auto_increment;
(用modify修改时,等于重新设置了当前所有的字段属性,除了表名)
修改字段名字和类型change
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
删除表 DROP TABLE 表名,表名,表名;

delete删除数据不能删除结构
mysql> delete from t1; //清空表里的数据,但是保留表结构
更新数据update update 表名 SET 字段1=值1,字段2=值2… WHERE CONDITION;
可用来修改密码
mysql> update mysql.user set password=password(‘123’) where user=’root’;
update后需要使用flush privileges;刷新
查询条件注意事项:
逻辑操作符:
and
or
and和or并存时and的优先级高
空值或者非空值:
is null 空值
is not null 非空值
where,by group,having
where 在by group前使用
having在by group后使用
MySQL权限表
mysql.user 用户字段,权限字段,安全字段,资源控制字段,存储了所有用户的信息
mysql.db用户字段,权限字段,全局,保存了用户对表的权限
mysql.tables_priv 表级,保存了用户对表的权限
mysql.columns_priv字段级别 ,保存了用户对列的权限
若只创建用户,相当于对users表添加相应数据。
若创建用户,并对其授权,授权对象是所有库下的所有表,会在users和db中添加相应数据
mysql> grant select on . to haha@’localhost’;
若给用户授权对象为一个库下的所有表,会在mysql库下的users和tables中添加数据
mysql> grant select on school.* to haha@’localhost’;
若给用户授权对象为一个库下的某个表,会在mysql库下的users和tables,columns中添加数据
mysql> grant select(tname) on school.t1 to haha@’localhost’; 给haha用户授予对school库下t1表里的tname字段查询的权限
查看权限mysql> show grants for rose@’localhost’;
移除权限revoke
mysql> revoke delete,create,drop,alter on . from alice@’localhost’;
授权所有库所有表包括授权权限
mysql> grant all on . to rose@’localhost’ with grant option;
回收所有权限包括授权权限
mysql> revoke all privileges,grant option from rose@’localhost’;

修改密码
1 在配置文件里设置skip-grant-tables,登陆后再修改密码
2 在mysql中创建用户时定义密码
mysql> create user alice identified by ‘123’;
3利用update和mysql.user指定用户更改密码
mysql> update mysql.user set authentication_string=password(‘123’) where user=’root’;
mysql>flush privileges;
4实验环境可用
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘Www.1.com’;
5用password
mysqladmin -uroot -p’123’ password’456’;

引擎engine:
myisam引擎:支持表级锁,不支持外键和事务
mrg_myisam引擎
只能作用在myisam引擎上,用于两张表的融合,融合表可以删除可以更新,但是不可以插入,因为它不知道往哪个表中插入,如果想要插入,在创建的时候加选项就可以。
融合表虽然不可以直接插入数据,但是往原表中插入数据,融合表会自动更新
innodb:支持行级锁,主持事务和外键

猜你喜欢

转载自blog.csdn.net/weixin_42275939/article/details/82527303
今日推荐