create database name;
库选项:数据库相关属性。
字符集:charset,代表当前数据库下所有表储存的数据默认指定的字符集。不指定,则使用DBMS默认的。
校对集:collate校对集。
Eg:create database name charset=utf8
_
,多个字符:%
修改数据库字符集(库选项)
是否可以修改数据库名字?5.5之前rename命令可以修改,5.5之后不能修改。只能修改库选项:字符集、校对集。
alter database charset=utf8
一般数据库有内容之后就不再修改编码方式。
drop database mydatabase;
删除虽简单,但确保做好安全操作,确保不会删库。
create table name[字段名 字段类型, 字段名 字段类型]
create table like name;
用途有限,一般用来数据库的迁移。
显示表中包含的字段信息:(名字、类型、属性等)
describe 表名;
desc 表名;
show columns from student;
show create table name;
mysql 有多种语句结束符:
;
,;
效果形同。
\G
:上面显示内容的转置。
其实就是设置表选项:engine, charset, collate。
alter table 表名 值选项=值
如果数据库已经确定了,里面有很多数据了,不要轻易修改表选项。
insert into 表名 [字段, 字段] values (值,)
insert into 表名 values (对应表结构的值);
这种语法要插入一个tuple,对应表中所有字段。
,
隔开。delete from 表名 [where 条件]; 如果没有where条件,会删除表中所有数据。
一般修改特定行的某些字段数据。
update 表名 set 字段名 = 新值 [where 条件];如果没有where条件,会更新表中所有数据。
字符Character
是各种文字和符号的总成,包括个国家文字、标点符号、图形符号。只有人能认出。
字符编码character code
就是计算机对各种符号,再计算机中的一种二进制存储代号。
字符集character set
是多个字符的集合。常见:ASCII
、GB2312
、BIG5
、Nnicode
等。
用户通过mysql.exe
来操作mysqld.exe
,真正的mysql操作时MySQLd.exe执行。如果不指定字符集,MySQL.exe就会使用自己默认的字符集。
解决方案:MySQL.exe客户端进行数据操作之前,先将自己使用的字符集告诉mysqld.exe即可。
简单设置:set names utf8;设置所有编码格式位utf8;
深层原理:
mysql.exe 与mysqld.exe之间的处理关系一共分为三层。
要统一character_set_client
和character_set_results
。设置方法:
数据表中一旦有了数据后,就不要修改编码格式了。
类型 | 大小 |
---|---|
Tinyint | 8位 |
smallint | 16位 |
mediumint | 24位 |
int | 32位 |
bigint | 64位 |
mysql默认整形为有符号整型。如果需要无符号数:应该写成:tinyint unsigned。
如果让数据显示从左侧填充0,用zerofill。填充0,只能是正整数。
显示长度:数据在显示的时候,到底可以显示多长位。
类型 | 精度 |
---|---|
float | 4字节存储数据。7位精度, 10^38 |
double | 8字节存储数据。15位精度 ,10^308 |
decimal | 定点数,保证数字位数精确 |
基本语法:
如果丢失精度,按照四舍五入舍弃。
用户不能插入数据直接超过指定的长度,但是如果是系统仅为导致的,系统可以承担。
日期类型:系统使用三个字节来存储数据,对应格式:YYYY-mm-dd,表示范围:1000-01-01到9999-12-12 。初始值:0000-00-00
时间类型:同样三个字节储存,对应格式:HH:iii::ss,时分秒。但是mysql中time类型能表示的时间范围要大得多。从-838:59:59到838:59:59。在MySQL中具体用处描述时间段。本质上就是用来表示时间区间的。
时间类型输入的时候,如果有空格,比如5 12:12:12
,就是 5*24+12=132小时,也就变成了:132:12:12
日期时间类型。就是将前面的date和time合并起来,用8个字节储存。格式:YYYY-mm-ddHH:ii:ss,表示范围:1000-01-01 00:00:00到9999-12-23 23:59:59.初始值全0.
时间戳类型,mysql中表示格林尼治时间开始的时间,格式依然是YYYY-mm-dd HH:ii:ss。旧版本的MySQL当tuple中有数据被更新的时候,timestamp字段的数据会自动更新。
年类型。占用一个字节,表示1900到2155年。有两种具体的数据插入方式:0-99和四位数的具体年。
当year进行两位数插入的时候,当数字小于等于69时,默认21世纪.当大于等于70,默认20世纪。
基本语法:char(L),L代表字符数,定长数组。
变长字符:varchar(L),字符串最长L。L理论长0到65535.
varchar要记录数据长度,所以每个varchar产生后,系统都会在数据后面增加1-2个字节的额外开销,用来保存所占数据的空间长度。
如果数据本身小于127个字节,额外开销一个字节。如果大于等于128,额外开销两个字节。
char和varchar的区别:
两种文本类型:
Text:普通字符文本
Blob:二进制文本,一般都不会这用用,通常用一个链接只想对应文件本身。
Text也有四种:
实际使用的时候,不用刻意选择text类型,系统会自动判断长度,选择合适的类型。
枚举类型:数据插入前,先预设几个项,这几个项就是可能最终出现的数据结果。比如某个数据只有几个值,比如(男、女、保密),
基本语法:enum(数据1, 数据2)
create table my_enum( gender enum('男', '女', '保密') );
存储enum的原理:实际上存储的值并不是真正的字符串,而是字符串对应的下标,当系统设定枚举类型的时候,会给美剧中每一个元素定义一个下表,下表用1开始。
实际上enum存储的是数值。插入的时候也可以直接插入数值。
集合,将多个数据选项同时保存的数据类型。本质是将指定项对应的二进制位控制,1表示被选中,0表示没被选中。
基本语法:set(‘A’,‘B’,‘C’)。
如果有8个选项,将会使用一个字节进行储存。
16个选项,将会用两个字节进行储存。
一开始设置的数据顺序就是保存的顺序。
实际上会把二进制字符串转化为十进制的时候,原来顺序的最左侧为最低位,最右侧有最高位。
Enum:单选
Set:多选。
Mysql中,记录长度的总长度不能超过65535个字节。
varchar能够储存的理论值为65535个字符,字符在不同的字符集下可能占用多个字节。
gbk:65535/2 = 32767…1,varchar还需要两个字节储存字符串长度,所以gbk最长32766个字符。
utf8:65535/3 = 21845…0,varchar还需要两个字节储存字符串长度,所以utf8最长21844个字符。
分类采用主键对应的意义。
填充后会根据之前存在的数据进行自动增加后填充数据。
通常用于逻辑主键。
一张表最多只能有一个自增长
如果修改后的自增长值比当前自增长最大还大,下一次就会从修改后的值开始增长。否则就会按照当前最大值增长。步长为1.
在本地登录远端mysql,运行mysql时需要加上 -h
字段。另外在服务器端的mysql里需要进行授权:
grant all privileges on *.* to root@'%' identified by "root";
这样的话root用户就可以在任何ip登录,登陆密码是root
。