-- 创建数据库CREATEDATABASE mydb
-- 使用数据库
USE mydb
-- 查看数据表
SHOW TABLES
-- 创建表
CREATETABLE pet (
NAME VARCHAR(20),
ownerr VARCHAR(20),
species VARCHAR(20),
sex CHAR(1),
birth DATE,
death DATE);-- 显示表结构
DESCRIBE pet;
-- 改表的名字 ALTERTABLE pet RENAME TO pet2;ALTERTABLE pet2 RENAME TO pet;-- 约束:约束(主键Primary key、唯一性Unique、非空Not Null)-- 自动增张 auto_increment -- 外键Foreign key-----与reference table_name(col_name列名)配合使用,建表时单独使用 -- 删除多个表中有关联的数据----设置foreign key 为set null-- 删除表DROPTABLEIFEXISTS pet;-- 增加一个字段: ALTERTABLE pet ADDCOLUMN (phone VARCHAR(11));-- 删除一个字段ALTERTABLE pet DROP phone;-- 修改字段名称/类型ALTERTABLE pet CHANGE phone tel VARCHAR(11)
ALTERTABLE pet CHANGE tel phone VARCHAR(11)
-- 插入数据
INSERTINTO pet VALUES
('Fluffy','Harold','cat','f','1993-02-04',NULL),
('Claws','Gwen','cat','m','1994-03-17',NULL),
('Buffy','Harold','dog','f','1989-05-13',NULL),
('Fang','Benny','dog','m','1990-08-27',NULL),
('Bowser','Diane','dog','m','1979-08-31','1995-07-29'),
('Chirpy','Gwen','bird','f','1998-09-11',NULL),
('Whistler','Gwen','bird',' ','1997-12-09',NULL),
('Puffball','Diane','hamster','f','1999-03-30',NULL),
('Slim','Benny','snake','m','1996-04-29',NULL);-- 查询表数据SELECT * FROM pet
-- 清空表数据
DELETEFROM pet
-- 此方法也会使表中的取号器(ID)从1开始
TRUNCATETABLE pet;-- 修改字段值UPDATE pet SET birth = '1989-08-31'WHERE NAME = 'Bowser'SELECT * FROM pet WHERE NAME = 'Bowser'
数据表查询
基本查询
-- DISTINCT 检索出每个唯一的输出记录SELECTDISTINCT ownerr FROM pet
-- 排序 orderby,对于等同但大小写不同的列,并未定义其顺序,某一列,可以使用BINARY强制执行区分大小写的分类功能,如:ORDERBY BINARY col_name.
SELECT NAME,ownerr,birth FROM pet ORDERBY birth
-- 默认排序是升序,可以利用关键字进行控制。DESC(降序)、ASC(升序)
SELECT NAME,ownerr,birth FROM pet ORDERBY birth ASC
-- 多列进行排序
SELECT NAME,ownerr,birth FROM pet ORDERBY ownerr,birth DESC
日期计算
-- YEAR()-提取日期的年部分,MONTH()-提取月份,DAYOFMONTH()-提取所在月份中的日SELECT birth, YEAR(birth),MONTH(birth),DAYOFMONTH(birth) FROM pet
-- RIGHT(birth,5)-提取birth的右边5个字符,LEFT - 从左边开始取,MID - 从指定位置(包括)开始取指定长度
SELECTRIGHT('1234567890',5),LEFT('1234567890',5),MID('1234567890',2,4)
-- 提出已近死亡的
-- 出生月份大于当前月份,年龄-1。
SELECT
NAME,
birth,
CURDATE(),
(YEAR(CURDATE()) - YEAR(birth)) - (RIGHT(CURDATE(), 5) < RIGHT(birth, 5)) AS age
FROM
pet WHERE death ISNULLORDERBY age
-- 查询已死亡的年龄
SELECT
NAME,
birth,
death,
(YEAR(death) - YEAR(birth)) - (RIGHT(death, 5) < RIGHT(birth, 5)) AS age
FROM
pet WHERE death ISNOTNULLORDERBY age
-- 查询下一个月谁过生日
SELECT * FROM pet ORDERBYMONTH(birth)
SELECT * FROM pet WHEREMONTH(birth) = MONTH(CURDATE()) + 1SELECT * FROM pet WHEREMONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL1MONTH))
NULL值
-- NULL 值的判断,不能使用比较运算符,只能用 is null 或 is not nullSELECT1 = NULL, 1 > NULL, 1 < NULL, 1ISNULL, 1ISNOTNULL
-- 0或 NULL意味着假而其它值意味着真。布尔运算的默认真值是1。
SELECT0ISNULL, 0ISNOTNULL, ''ISNULL, ''ISNOTNULL;
模糊匹配
-- MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式。
-- "_" 匹配任何单个字符;"%" 匹配任意数目字符(包括零字符),SQL的模式默认是忽略大小写。关键字 LIKE 或 NOT LINK
-- 查找以b开头的name
SELECT * FROM pet WHERE NAME LIKE'b%'
-- 查找以'fy'结尾的名字SELECT * FROM pet WHERE NAME LIKE'%fy'
-- 查找包含w的名字
SELECT * FROM pet WHERE NAME LIKE'%w%'
-- 查找正好是5个字符的名字
SELECT * FROM pet WHERE NAME LIKE'_____'SELECT * FROM pet WHERE LENGTH(NAME) = 5
-- MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。
-- "." 匹配任何单个字符;
-- "[...]" 匹配在方括号内的任何字符,为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。
-- "*" 匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。
-- 如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,只有与整个值匹配,模式才匹配)。
-- 为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。
-- 查找以b开头的name
SELECT * FROM pet WHERE NAME REGEXP '^b'
-- 查找以'fy'结尾的名字SELECT * FROM pet WHERE NAME REGEXP 'fy$'
-- 查找包含w的名字
SELECT * FROM pet WHERE NAME REGEXP 'w'
-- 查找正好是5个字符的名字
SELECT * FROM pet WHERE NAME REGEXP '^.....$'SELECT * FROM pet WHERE NAME REGEXP '^.{5}$'