mysql学习笔记1——数据库的创建与查询

MYSQL规范

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

连接数据库

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

创建数据库

在mysql中DATABASE与SCHEMA是一样的

1
CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name

语法说明:花括号代表必须要有的 竖线代表选项(or) 中括号为可选项.

1
CREATE DATABASE t1; //创建一个t1的数据库

如果当数据库存在的话再次添加相同的数据库将会报错.但是加上IF NOT EXISTS将会屏蔽掉这个错误信息

1
CREATE DATABASE IF NOT EXISTS t1;

创建一个utf8编码的数据库

1
CREATE DATABASE study CHARACTER SET utf8;

查看当前服务器下数据库

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

查看警告信息

1
SHOW WARNINGS;

查看数据库编码

1
SHOW CREATE DATABASE db_name;

修改数据库

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

修改数据库为gbk编码

1
ALTER DATABASE study CHARACTER SET = gbk;

删除一个数据库

1
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

打开数据库

1
USE db_name;

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

1
SELECT DATABASE();

创建数据表

1
2
3
CREATE TABLE [IF ONT EXISTS] table_name(
column_name data_type,
)

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

UNSIGNED(无符号位 从0开始)

查看数据表

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

查看数据表结构

1
SHOW COLUMNS FROM tbl_name
1
SHOW COLUMNS FROM tb1;

记录插入与查找

1
INSERT [INTO] tbl_name [(col_name,...)] VALUES(val,...)

省略掉列名称则为所有的字段赋值

1
INSERT tb1 VALUES("Tom",25,7865.32);

如果少写了一个列值 则会出现 Column count doesnt value count at row 1 列不匹配

为某个列赋值

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

记录查找

1
SELECT expr,...FROM tbl_name

列出数据表中全部字段

1
SELECT * FROM tb1;

*指的是字段过滤而不是记录过滤.

空值与非空

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

1
2
3
4
CREATE TABLE tb2(
username VARCHAR(20) NOT NULL,
age TINYINT UNSIGNED NULL
);
1
INSERT tb2 VALUES(NULL,25);

这段代码是错误的.会报错 Column username cannot be null;

自动编号

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

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

主键自动编号

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

初涉主键约束

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

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

定义主键自动编号

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

只需要加一个PRIMARY KEY.

添加数据

1
2
3
4
INSERT tb3(username) VALUES("Tom");
INSERT tb3(username) VALUES("John");
INSERT tb3(username) VALUES("Rose");
INSERT tb3(username) VALUES("Soul");

因为设置了主键,这样得使用字段对应添加

主键不与AUTO_INCREMENT使用

1
2
3
4
CREATE TABLE tb4(
id SMALLINT PRIMARY KEY,
username VARCHAR(20) NOT NULL
);

主键的字段可以赋值,但是不允许存在两个相同的值

涉及唯一约束

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

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

创建主键与唯一约束的表

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

写几条记录

1
2
INSERT tb5(username,age) VALUES('Tom',22);
INSERT tb5(username,age) VALUES('Tom',25);

第二条语句只会报错

默认约束

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

默认性别是保密

1
2
3
4
5
6
7
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")

总结

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