MYSQL规范

  1. 关键字与函数名称全部大写
  2. 数据库名称,表名称,字段名称全部小写
  3. SQL语句必须以分号结尾

连接数据库

musql -u user -p userpassword [-P port -H serverLocation]

创建数据库

在mysql中DATABASE与SCHEMA是一样的 CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name 语法说明:花括号代表必须要有的 竖线代表选项(or) 中括号为可选项. CREATE DATABASE t1; //创建一个t1的数据库 如果当数据库存在的话再次添加相同的数据库将会报错.但是加上IF NOT EXISTS将会屏蔽掉这个错误信息 CREATE DATABASE IF NOT EXISTS t1;

创建一个utf8编码的数据库

CREATE DATABASE study CHARACTER SET utf8;

查看当前服务器下数据库

SHOW {DATABASES|SCHEMAS} [LIKE "pattern" | WHERE expr]

查看警告信息

SHOW WARNINGS;

查看数据库编码

SHOW CREATE DATABASE db_name;

修改数据库

ALTER {DATABASE|SCHEMA} [db_name] [DEFAULT] CHARACTER SET [=] charset_name

修改数据库为gbk编码

ALTER DATABASE study CHARACTER SET = gbk;

删除一个数据库

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name;

数据类型

它决定了数据的存储格式,代表了不同的信息类型.

整型

TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT 分别是存储的数据长度不同.一般用INT即可.

浮点型

FLOAT[(M,D)] M是数字总位数,D是小数点后面的位数,如果M与D被省略,根据硬件允许的限制允许保存精度浮点数精确到大约7位小数位

DOUBLE[(M,D)]


FLOAT[(7,2)] 小数点之前的数字+小数点之后的数字总数为7为

时间类型

YEAR 年

TIME 时间类型 范围是’-838:59:59’到’838:59:59’。

DATE(日期类型) 年月日

DATETIME(日期时间类型) 年月日时分秒

TIMESTAMP(时间戳)


真正时间类型会采用数字类型来存储,利用时间戳的形式 这样做的目的是为了考虑跨时区问题

字符型

CHAR(定长类型) 0~255 如果字符设置为4,如果字符达不到4,后面以空格来补齐.

VARCHAR(变长) 不会自动补齐

TINYTEXT 2^8

TEXT 2^16

MEDIUMTEXT 2^24

LONGTEXT 2^32

ENUM("value1","value2") 枚举值(选项值) 比如性别 男,女,保密

SET("value1","value2") 1,2,3,4,8 取决于set成员数目 最多64个成员

数据表的操作

USE

打开数据库 USE db_name;

显示当前用户打开的数据库

SELECT DATABASE();

创建数据表

``` CREATE TABLE [IF ONT EXISTS] table_name( column_name data_type, )

```


mysql> CREATE TABLE tb1( -> username VARCHAR(20), -> age TINYINT UNSIGNED, -> salary FLOAT(8,2) UNSIGNED -> );

UNSIGNED(无符号位 从0开始)

查看数据表

SHOW TABLES [FROM db_name] [LIKE "pattern" | WHERE expr ]

查看数据表结构

SHOW COLUMNS FROM tbl_name

SHOW COLUMNS FROM tb1;

记录插入与查找

INSERT [INTO] tbl_name [(col_name,...)] VALUES(val,...) 省略掉列名称则为所有的字段赋值

INSERT tb1 VALUES("Tom",25,7865.32); 如果少写了一个列值 则会出现 Column count doesnt value count at row 1 列不匹配

为某个列赋值

INSERT tb1(username,salary) VALUES ("John",4500.69);

记录查找

SELECT expr,...FROM tbl_name

列出数据表中全部字段

SELECT * FROM tb1; *指的是字段过滤而不是记录过滤.

空值与非空

NULL,字段值可以为空 NOT NULL ,字段值禁止为空

CREATE TABLE tb2( username VARCHAR(20) NOT NULL, age TINYINT UNSIGNED NULL );

INSERT tb2 VALUES(NULL,25); 这段代码是错误的.会报错 Column username cannot be null;

自动编号

AUTO_INCREMENT 自动编号,且必须与主键组合使用 默认情况下,起始值为1,每次的增量为1

字段必须为数值型.FLOAT小数位数必须为0

主键自动编号

CREATE TABLE tb3( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL );

初涉主键约束

PRIMARY KEY 主键约束 每张数据表只能存在一个主键 主键保证记录的唯一性 主键自动为NOT NULL

主键可以不必与AUTO_INCREMENT一起使用

定义主键自动编号

CREATE TABLE tb3( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(30) NOT NULL ); 只需要加一个PRIMARY KEY.

添加数据

INSERT tb3(username) VALUES("Tom"); INSERT tb3(username) VALUES("John"); INSERT tb3(username) VALUES("Rose"); INSERT tb3(username) VALUES("Soul"); 因为设置了主键,这样得使用字段对应添加

主键不与AUTO_INCREMENT使用

CREATE TABLE tb4( id SMALLINT PRIMARY KEY, username VARCHAR(20) NOT NULL ); 主键的字段可以赋值,但是不允许存在两个相同的值

涉及唯一约束

UNIQUE KEY 唯一约束可以保证记录的唯一性 唯一约束的字段可以为空值(NULL) 每张数据表可以存在多个唯一的约束

索引的原理,全NULL值不被记录在索引上 也就是这个字段中的不能存在相同的记录,但是可以存在相同的NULL值

创建主键与唯一约束的表

CREATE TABLE tb5( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20) NOT NULL UNIQUE KEY, age TINYINT UNSIGNED );

写几条记录 INSERT tb5(username,age) VALUES('Tom',22); INSERT tb5(username,age) VALUES('Tom',25); 第二条语句只会报错

默认约束

DEFAULT 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值

默认性别是保密

``` CREATE TABLE tb6( id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, username VARCHAR(20) NOT NULL UNIQUE KEY, sex ENUM("1","2","3") DEFAULT "3" );

INSERT tb6(username) VALUES("TOM") ```

总结

  • 创建数据库
  • 创建表
  • 创建字段
  • 创建记录
  • 设置字段选项
  • 查看表,字段,记录
  • 主键与约束