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

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(变长)不会自动补齐

TINYTEXT2^8

TEXT2^16

MEDIUMTEXT2^24

LONGTEXT2^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") 

总结

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