前言
记录一些MySQL的基础语句
操作MySQL的命令
MySQL数据库、表的操作
show databases; //查看数据库
use xxxdatabase; //使用某个数据库
show tables; //选定了数据库后,可查看相应数据库下的表
describe tablename; //查看表的结构
show create table tablename; //查看表结构等详情
show variables like 'charac%'; //查看mysql编码格式
show variables like 'port'; //查看端口号
create database databasename; //创建数据库
drop database databasename; //删除数据库
drop table tablename; //删除表 但需要先use 相应数据库
创建数据表
通用语句
CREATE TABLE table_name(column_name column_type);
示例
CREATE TABLE IF NOT EXISTS `t_student`(
'id' INT UNSIGNED AUTO_INCREMENT,
`runoob_title` VARCHAR(100) NOT NULL,
`runoob_author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
将字段设置为NOT NULL,在操作数据库时,若输入该字段为NULL,就会报错。
AUTO_INCREMENT 为自增属性,一般用在主键,可以用AUTO_INCREMENT=10,设置初始值。
PRIMARY_KEY 定义列为主键,不定义则默认为‘id’。复合主键用逗号分隔即可
数据类型
整数
类型 | 大小 | 范围 |
---|---|---|
TINYINT | 1字节 | (-128,127) 2^7 |
SMALLINT | 2字节 | (-32768,32767) 2^15 |
MEDIUMINT | 3字节 | 2^23 |
INT | 4字节 | 2^31 |
BIGINT | 8字节 | 2^63 |
实数
类型 | 大小 | 范围 |
---|---|---|
FLOAT | 4字节 | 1bit 符号位 8bits 指数位 23bits 小数 |
DOUBLE | 8字节 | 1bit 符号位 16bits 指数位 47bits 小数 |
DECIMAL | 8字节 | 1bit 符号位 16bits 指数位 47bits 小数 |
DECIMAL类型从MySQL 5.1引入,列的声明语法是DECIMAL(M,D),多用在金钱上。
M是数字的最大数(精度)。其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254),M 的默认值是10。
D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M。
decimail(M,D)占M+2个字节。
文本
类型 | 大小 |
---|---|
CHAR | utf-8 每个字符占3个字节 |
VARCHAR | 存储变长字符串 |
char 最多能存放的字符个数 255,和编码无关。
varchar类型,用于存储变长字符串,只占用必要的存储空间。由于是变长,因此需要一个字节存储字符串的长度(字符串长度小于255时),字符串长度大于255时,用两个字节存储字符串长度。
-
使用最小的符合需求的长度。
-
系统上线后尽量不要修改VARCHAR的长度,因为在mysql 5.7之前,只要一修改就会发生锁表。
-
VARCHAR(5)和VARCHAR(200)存储’AAAAA’这一个字符串时都是使用一个额外的字节来记录字符串的长度,那么他们的性能有什么不同呢?
VARCHAR(5)优于VARCHAR(200)
因为MySQL为了能够更有效的优化查询,对于VARCHAR字段使用的是其最大的宽度来分配内存,所以如果我们把宽度定的太长就会消耗更多的内存。
时间
类型 | 大小 |
---|---|
DATATIME | 格式:yyyy-MM-dd HH:mm:ss 占8个字节 时间范围:1000-1-1 00:00:00至9999-12-31 23:59:59 |
TIMESTAMP | 格式:yyyy-MM-dd HH:mm:ss 占4个字节 |
DATE | 格式:yyyy-MM-dd 占3个字节 范围为1000-01-01到9999-12-31 |
TIME | 格式:HH:MM:SS 占3个字节 范围为’-838:59:59’/‘838:59:59’ |
YEAR | 格式:YYYY 占1个字节 范围为1901~2155 |
说明:timestamp 是自动存储记录修改的时间
timestamp将客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储,查询时又将其转化为客户端当前时区的时间返回。
datetime不做任何改动,原样输入原样输出。
另外,两者范围不一样,timestamp存储的时间范围:‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’
datetime存储的时间范围:‘1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’
增删改查(CRUD)
增
INSERT INTO table_name
-> (name, age)
-> VALUES
-> ("Tom", 10);
delete from tablename WHERE id=3; //删除表中数据
select * from tablename; //查看表中的内容
修改数据库编码格式
在/etc/mysql/my.cnf或者conf.d文件夹下创建一个*.cnf文件,写入以下两行代码
[mysqld]
character-set-server=utf8
重启mysql
sudo service mysql restart
改好编码格式后再创建数据库
备注
关于主键
1、主键应当对用户没有意义
2、主键应当由计算机自动生成
3、主键不应包含动态变化的数据,如时间戳
4、不要更新主键
5、主键最好是单列,可以提高连接和筛选操作的效率