MySQL学习笔记
来源:互联网 发布:知乎一定要注册吗 编辑:程序博客网 时间:2024/05/22 11:47
学习笔记
上面自动生成的目录有错误,这个目录方便查找。
- 学习笔记
- 创建数据库
- 创建数据表
- 插入数据
- 更新数据
- 删除数据
- 查询数据
- 基本形式
- DISTINCT
- WHERE
- 精确搜索
- 模糊搜索LIKE
- 其他扩展
- AND OR
- IN
- BETWEEN
- ORDER BY
- LIMITTOP
- 别名AS
- 连接JOIN
- INNER JOIN
- LEFT JOIN
- RIGHT JOIN
- FULL JOIN
- UNION
- INSERT INTO SELECT
- ALTER TABLE
- AUTO INCREMENT
- 索引
- 建立索引
- CREATE INDEX 语法
- CREATE UNIQUE INDEX 语法
- 删除索引
- DROP INDEX 语法
- 建立索引
- DROP
- DROP DATABASE 语句
- DROP TABLE 语句
- TRUNCATE TABLE 语句
- GROUP BY
- HAVING
- 日期
- Date 函数
- Date 数据类型
- 日期格式化
- 函数
- AVG
- COUNT
- MAX与 MIN
- SUM
- UCASE与LCASE
- MID
- LENGTH
- ROUND
- FORMAT
- IFNULL
- 其他
- MySQL 数据类型
- Text 类型
- Number 类型
- Date 类型
- SQL通配符
- 约束
- SQL语法排序
- MySQL 数据类型
创建数据库
CREATE DATABASE dbname;
例:
#创建一个名为my_db的数据库CREATE DATABASE my_db;
创建数据表
CREATE TABLE tablename(column_name1 data_type(size) [AUTO_INCREMENT] [constraint_name],column_name2 data_type(size) [constraint_name],column_name3 data_type(size) [constraint_name],....);
例:
#创建一个数据表CREATE TABLE student(Id INT(10) auto_increment PRIMARY KEY, #主键自增Name VARCHAR(20) not NULL,#非空Sex VARCHAR(4),Birth YEAR,Department VARCHAR(20) NOT NULL,Address VARCHAR(50));
插入数据
INSERT INTO 语句用于向表中插入新记录。
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_nameVALUES (value1,value2,value3,...);
第二种形式需要指定列名及被插入的值:
NSERT INTO table_name (column1,column2,column3,...)VALUES (value1,value2,value3,...);
例:
INSERT INTO student (Name,Sex,Birth,Department,Address) VALUES ('小王','男','1994','自动化','天津');INSERT INTO studentVALUES ('','小李','女','1992','计算机','河北');
更新数据
Update 语句用于修改表中的数据。
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
例:
UPDATE student_4088 SET Name='小赵' WHERE Id = '2';
注:更新多条信息时用’,’隔开,如下:
UPDATE student_4088 SET Name = '小赵',sex = '女' WHERE Id = '2';
删除数据
DELETE 语句用于删除表中的行。
DELETE FROM 表名称 WHERE 列名称 = 值
例:
DELETE FROM student WHERE Id = '2';
查询数据
基本形式
SELECT column_name,... FROM table_name;
例:
SELECT Name,Sex FROM student; SELECT * FROM student;
DISTINCT
仅列出不同值
SELECT DISTINCT column_name,column_nameFROM table_name;
WHERE
精确搜索
SELECT column_name,column_nameFROM table_nameWHERE column_name operator value;
例:
SELECT Name FROM student WHERE Sex = '男';
模糊搜索(LIKE)
SELECT column_name(s)FROM table_nameWHERE column_name LIKE pattern;
pattern ‘%str’ ==> 以str结尾的。
‘str%’ ==> 以str开始的。
‘%str%’ ==> 包含str的。
关于 通配符 下文有提到。
例:
SELECT Name FROM student WHERE Birth LIKE '%99%';
其他扩展
AND & OR
多条件
例:
SELECT Name FROM student_4088 WHERE Birth LIKE '%9%'AND(Name LIKE '小%'ORSex like '女' );
IN
IN 操作符允许您在 WHERE 子句中规定多个值。
SELECT column_name(s)FROM table_nameWHERE column_name IN (value1,value2,...);
例:
SELECT *FROM student_4088 WHERE Birth IN ('1992', '1994');
BETWEEN
BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。
SELECT column_name(s)FROM table_nameWHERE column_name BETWEEN value1 AND value2;
例:
SELECT *FROM student_4088 WHERE Birth BETWEEN 1992 AND 1994;
ORDER BY
排序
ASC 或缺省 ==> 升序 DESC ==> 降序
SELECT column_name,column_nameFROM table_nameORDER BY column_name,column_name ASC|DESC;
例:
SELECT *FROM student_4088 WHERE Birth LIKE '%9%'AND(Name LIKE '小%'ORSex like '女' )ORDER BY Id;
LIMIT(TOP)
规定要返回的记录的数目。
SELECT column_name(s)FROM table_nameLIMIT number;
例:
SELECT *FROM student_4088 WHERE Birth LIKE '%9%'ORDER BY Id LIMIT 4;
别名(AS)
通过使用 SQL,可以为表名称或列名称指定别名。
列
SELECT column_name AS alias_nameFROM table_name;
表
SELECT column_name(s)FROM table_name AS alias_name;
例:
#列的别名SELECT name AS '姓名'FROM student_4088 ;#表的别名SELECT s.name, c.C_name, c.GradeFROM student_4088 AS s, score_4088 AS cWHERE s.Id = c.Stu_id;
连接(JOIN)
JOIN 用于把来自两个或多个表的行结合起来。
INNER JOIN
INNER JOIN 关键字在表中存在至少一个匹配时返回行。
交集
SELECT column_name(s)FROM table1[INNER] JOIN table2ON table1.column_name=table2.column_name;
例:
SELECT s.name, c.C_name, c.GradeFROM student_4088 AS sINNER JOIN score_4088 AS cON s.Id = c.Stu_id;
LEFT JOIN
LEFT JOIN 从左表返回所有的行,即使右表中没有匹配。如果右表中没有匹配,则结果为 NULL。
左边都有右边看情况。
SELECT column_name(s)FROM table1LEFT [OUTER] JOIN table2ON table1.column_name=table2.column_name;
例:
SELECT s.name, c.C_name, c.GradeFROM student_4088 AS sLEFT JOIN score_4088 AS cON s.Id = c.Stu_id;
RIGHT JOIN
RIGHT JOIN 关键字从右表返回所有的行,即使左表中没有匹配。如果左表中没有匹配,则结果为 NULL。
右边都有左边看情况。
SELECT column_name(s)FROM table1RIGHT [OUTER] JOIN table2ON table1.column_name=table2.column_name;
例:
SELECT s.name, c.C_name, c.GradeFROM student_4088 AS sRIGHT JOIN score_4088 AS cON s.Id = c.Stu_id;
FULL JOIN
只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。
SELECT column_name(s)FROM table_name1FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name
例:
SELECT * FROM scoreFULL JOIN studentON stu_id = student.Id;
UNION
UNION 操作符合并两个或多个 SELECT 语句的结果。
两个表的结构要相同。
SELECT column_name(s) FROM table1UNIONSELECT column_name(s) FROM table2;
UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
SELECT column_name(s) FROM table1UNION ALLSELECT column_name(s) FROM table2;
INSERT INTO SELECT
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。
INSERT INTO table2(column_name(s))SELECT column_name(s)FROM table1;
例:
INSERT INTO score(Id)SELECT Stu_idFROM student;
ALTER TABLE
ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
如需在表中添加列,请使用下面的语法:
ALTER TABLE table_nameADD column_name datatype
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
ALTER TABLE table_nameDROP COLUMN column_name
要改变表中列的数据类型
ALTER TABLE table_nameMODIFY COLUMN column_name datatype
例:
#添加列ALTER TABLE studentADD test VARCHAR(10);#修改参数类型ALTER TABLE studentMODIFY COLUMN test INT(10);#删除列ALTER TABLE studentDROP COLUMN test;
AUTO INCREMENT
Auto-increment 会在新记录插入表中时生成一个唯一的数字。
下面的 SQL 语句把 “Persons” 表中的 “ID” 列定义为 auto-increment 主键字段:
CREATE TABLE Persons(ID int NOT NULL AUTO_INCREMENT,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),PRIMARY KEY (ID));
使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。
默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。
要让 AUTO_INCREMENT 序列以其他的值起始,请使用下面的 SQL 语法:
ALTER TABLE Persons AUTO_INCREMENT=100
索引
建立索引
CREATE INDEX 语法
在表上创建一个简单的索引。允许使用重复的值
CREATE INDEX index_nameON table_name (column_name)
CREATE UNIQUE INDEX 语法
在表上创建一个唯一的索引。不允许使用重复的值
CREATE UNIQUE INDEX index_nameON table_name (column_name)
例:
CREATE INDEX test1ON student (Name);
删除索引
DROP INDEX 语法
ALTER TABLE table_name DROP INDEX index_name
例:
ALTER TABLE student DROP INDEX test1;
DROP
DROP DATABASE 语句
DROP DATABASE 语句用于删除数据库。DROP DATABASE database_name
DROP TABLE 语句
DROP TABLE 语句用于删除表。DROP TABLE table_name
TRUNCATE TABLE 语句
删除表内的数据,但并不删除表本身。
TRUNCATE TABLE table_name
GROUP BY
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_name;
例:
SELECT C_name, COUNT(C_name) FROM score_4088GROUP BY C_name;
HAVING
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGROUP BY column_nameHAVING aggregate_function(column_name) operator value;
日期
Date 函数
Date 数据类型
日期格式化
DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。
DATE_FORMAT(date,format)
函数
AVG()
AVG() 函数返回数值列的平均值。
SELECT AVG(column_name) FROM table_name
COUNT()
COUNT() 函数返回匹配指定条件的行数。
SELECT COUNT(column_name) FROM table_name;
COUNT(DISTINCT column_name) 返回指定列的不同值的数目。
SELECT COUNT(DISTINCT column_name) FROM table_name;
MAX()与 MIN()
MAX()/MIN()返回指定列的最大/小值。
SELECT MAX(column_name)/MIN(column_name) FROM table_name;
SUM()
SUM() 函数返回数值列的总数。
SELECT SUM(column_name) FROM table_name;
UCASE()与LCASE()
UCASE()/LCASE()把字段的值转换成大/小写。
SELECT UCASE(column_name)/LCASE(column_name) FROM table_name;
MID()
MID() 函数用于从文本字段中提取字符。
SELECT MID(column_name,start[,length]) FROM table_name;
LENGTH()
LENGTH() 函数返回文本字段中值的长度。
SELECT LENGTH(column_name) FROM table_name;
ROUND()
ROUND() 函数用于把数值字段舍入为指定的小数位数。
SELECT ROUND(column_name,decimals) FROM table_name;
FORMAT()
FORMAT() 函数用于对字段的显示进行格式化。
SELECT FORMAT(column_name,format) FROM table_name;
SELECT DATE_FORMAT(Now(),'%Y-%m-%d') FROM Websites;
IFNULL()
IFNULL()函数用于在发现参数为空时为参数赋值。
例:
SELECT IFNULL(grade,0)FROM score;
其他
MySQL 数据类型
在 MySQL 中,有三种主要的类型:Text(文本)、Number(数字)和 Date/Time(日期/时间)类型。
Text 类型:
Number 类型:
*这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。
如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。
Date 类型:
*即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。
在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。
TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
SQL通配符
通配符可用于替代字符串中的任何其他字符。
注意:”_”不能匹配中文
[charlist],[^charlist]不能用like语句。
注:后两个与正则表达式有关。
约束
如果存在违反约束的数据行为,行为会被约束终止。
约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。
SQL语法排序
From
On
Join
Where
Group By
With
Having
Select
Distinct
Order By
TOP
- 【MySQL】MySQL学习笔记
- 【mysql】mysql学习笔记
- Mysql学习笔记 --- mysql数据类型
- MySQL学习笔记--MySQL编程
- JBoss-MySql学习笔记
- mysql学习笔记
- Mysql学习笔记(1)
- Mysql学习笔记
- MySQL学习笔记
- Tomcat Mysql 。。。学习笔记
- mysql学习笔记
- mysql DB(学习笔记)
- MySQL 学习笔记一
- MySQL学习笔记
- mysql学习笔记
- mysql学习笔记
- MySQL学习笔记
- MySql学习笔记
- WPF 使用MediaElement元素循环播放问题
- C语言基本教程 第5课:语句和表达式
- 431稳压电路分析
- 如何修改Tomcat的默认项目发布路径
- [转]iOS应用性能调优的25个建议和技巧
- MySQL学习笔记
- iOS代理不回调的6种原因
- 循环队列(java描述)
- 项目遇到了两个错
- mokito详解三
- Java对象的创建过程
- java system.out.printf()的使用方法
- iOS Pch文件 详解
- 文章搬家,请大家易步到新的家庭