1.基本操作
-
查看所有数据库名称:SHOW DATABASES;
-
切换数据库:USE mydb1,切换到mydb1数据库;
-
查看当前使用的数据库的名称: select database();
2.操作数据库
#语法:
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARACTER SET 字符集 COLLATE 排序规则字符集];
#创建数据库:
CREATE DATABASE [IF NOT EXISTS] mydb1;
创建数据库,例如:CREATE DATABASE mydb1,创建一个名为mydb1的数据库。如果这个数据已经存在,那么会报错。例如CREATE DATABASE IF NOT EXISTS mydb1,在名为mydb1的数据库不存在时创建该库,这样可以避免报错。
DEFAULT CHARACTER: 默认的字符集, 如果没有设置,默认是utf8
COLLATE: 排序规则, 如果没有设置,默认是: utf8_general_ci
CREATE DATABASE IF NOT EXISTS mydb2 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
注意:
字符集:
utf8: utf8 编码最⼤字符长度为 3 字节,如果遇到 4 字节的宽字符就会插⼊异常了,比如Emoji表情,就无法使用utf8存储,推荐使用utf8mb4
utf8mb4: mb4即most bytes 4,专门用来兼容四个字节即以上的unicode, 在Mysql在5.53版本之后
排序规则:
utf8mb4_bin:将字符串每个字符⽤⼆进制数据编译存储,区分⼤⼩写,⽽且可以存⼆进制的内容。推荐使用
utf8mb4_general_ci:ci即case insensitive,不区分⼤⼩写。没有实现Unicode排序规则,在遇到某些特殊语⾔或者字符集,排序结果可能不⼀致。但是,在绝⼤多数情况下,这些特殊字符的顺序并不需要那么精确。
utf8mb4_unicode_ci:是基于标准的Unicode来排序和⽐较,能够在各种语⾔之间精确排序,Unicode排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
utf8mb4_general_ci是⼀个遗留的 校对规则,不⽀持扩展,它仅能够在字符之间进⾏逐个⽐较。
utf8_general_ci校对规则进⾏的⽐较速度很快,但是与使⽤ utf8mb4_unicode_ci的校对规则相⽐.
--删除数据库: DROP DATABASE [IF EXISTS] mydb1;
删除数据库,例如:DROP DATABASE mydb1,删除名为mydb1的数据库。如果这个数据库不存在,那么会报错。DROP DATABASE IF EXISTS mydb1,就算mydb1不存在,也不会的报错。
--修改数据库编码: ALTER DATABASE mydb1 CHARACTER SET utf8
修改数据库mydb1的编码为utf8。注意,在MySQL中所有的UTF-8编码都不能使用中间的“-”,即UTF-8要书写为UTF8。
3.数据类型
MySQL与Java一样,也有数据类型。MySQL中数据类型主要应用在列上。
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型:
类型 | 大小 | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 |
---|---|---|---|---|
TINYINT | 1byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2bytes | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | 3bytes | (-8388608,8388607) | (0,16777215) | 大整数值 |
INT | 4bytes | (-2147483648, 2147483647) | (0,4294967295) | 大整数值 |
BIGINT | 8bytes | (-2^63,2^63-1) | (0,2^64-1) | 大整数值 |
FLOAT | 4bytes | (-3.402823466 E+38, 3.402823466351 E+38) | 0 和 (1.175494351 E- 38,3.402823466 E+38) | 单精度浮点数值 |
DOUBLE | 8bytes | (-1.7976931348623157E+308,1.7976931348623157E+308) | 0 和(2.2250738585072014E-308,1.7976931348623157E+308) | 双精度浮点数值 |
DECIMAL | 依赖于M(精度)和D(标度) 的值 | 依赖于M(精度)和D(标度) 的值 | 小数值(精确定点数) |
如:
1). 年龄字段 -- 不会出现负数, 而且人的年龄不会太大
age tinyint unsigned
2). 分数 -- 总分100分, 最多出现一位小数
score double(4,1)
字符串类型
类型 | 大小 | 描述 |
---|---|---|
CHAR | 0-255 bytes | 固定长字符串(需要指定长度) |
VARCHAR | 0-65535 bytes | 变长字符串(需要指定长度) |
TINYBLOB | 0-255 bytes | 不超过255个字符的二进制数据 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 bytes | 极大文本数据 |
char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和
字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char的性
能会更高些。
如:
1). 用户名 username ------> 长度不定, 最长不会超过50
username varchar(50)
2). 性别 gender ---------> 存储值, 不是男,就是女
gender char(1)
3). 手机号 phone --------> 固定长度为11
phone char(11)
日期时间类型:
类型 | 大小 | 范围 | 格式 | 描述 |
---|---|---|---|---|
DATE | 3 | 1000-01-01 至 9999-12-31 | yyyy-MM-dd | 日期值 |
TIME | 3 | -838:59:59 至 838:59:59 | hh:mm:ss | 时间值 |
YEAR | 1 | 1901 至 2155 | yyyy | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00 至9999-12-31 23:59:59 | yyyy-MM-dd hh:mm:ss | 日期加时间 |
TIMESTAMP | 4 | 1970-01-01 00:00:01 至2038-01-19 03:14:07 | yyyy-MM-dd hh:mm:ss | 日期加时间 |
如:
1). 生日字段 birthday
birthday date
2). 创建时间 createtime
createtime datetime
常用类型:
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;
decimal:泛型型,在表单钱方面使用该类型,因为不会出现精度缺失问题;
char:固定长度字符串类型;
varchar:可变长度字符串类型;
text:字符串类型;大文本类型
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
datetime:日期时间类型,格式为:yyyy-MM-dd hh:mm:ss
timestamp:时间戳类型;
4.操作表
创建表:
CREATE TABLE 表名( 列名 列类型, 列名 列类型, ...... );
例如:
CREATE TABLE stu ( sid CHAR(6), sname VARCHAR (20), age INT, gender VARCHAR (10) ) ;再例如:
CREATE TABLE emp ( eid CHAR(6) COMMENT '编号', ename VARCHAR (50) COMMENT '姓名', age INT COMMENT '年龄', gender VARCHAR (6) COMMENT '性别', birthday DATE COMMENT '出生日期', hiredate DATE COMMENT '入职日期', salary DECIMAL (7, 2) COMMENT '薪水', RESUME VARCHAR (1000) COMMENT '简介' ) COMMENT '员工表' ;再例如: 设置表的使用的数据库引擎, 默认字符集,默认排序规则:
CREATE TABLE emp ( eid CHAR(6) COMMENT '编号', ename VARCHAR (50) COMMENT '姓名', age INT COMMENT '年龄', gender VARCHAR (6) COMMENT '性别', birthday DATE COMMENT '出生日期', hiredate DATE COMMENT '入职日期', salary DECIMAL (7, 2) COMMENT '薪水', RESUME VARCHAR (1000) COMMENT '简介' ) ENGINE=INNODB CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT '员工表' ;
表的其他操作SQL
--查看当前数据库中所有表名称: SHOW TABLES; --查看指定表的创建语句: 查看emp表的创建语句; SHOW CREATE TABLE emp; --查看表结构: DESC emp; --查看emp表结构; --删除表: DROP TABLE emp; --删除emp表; --修改表: --1. 修改之添加列:给stu表添加classname列: ALTER TABLE stu ADD (classname varchar(100)); --2. 修改之修改列类型:修改stu表的gender列类型为CHAR(2): ALTER TABLE stu MODIFY gender CHAR(2); --3. 修改之修改列名:修改stu表的gender列名为sex: ALTER TABLE stu change gender sex CHAR(2); --4. 修改之删除列:删除stu表的classname列: ALTER TABLE stu DROP classname; --5. 修改之修改表名称:修改stu表名称为student: ALTER TABLE stu RENAME TO student;