- SQL:Structure Query Language。(结构化查询语言),通过sql操作数据库(操作数据库,操作表,操作数据)
- SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准
- 各数据库厂商(MySql,oracle,sql server)都支持ISO的SQL标准。
- 各数据库厂商在标准的基础上做了自己的扩展。 各个数据库自己特定的语法
- Data Definition Language (DDL数据定义语言) 如:操作数据库,操作表
- Data Manipulation Language(DML数据操纵语言),如:对表中的记录操作增删改
- Data Query Language(DQL 数据查询语言),如:对表中数据的查询操作
- Data Control Language(DCL 数据控制语言),如:对用户权限的设置
(1)mysql的sql语法不区分大小写
MySQL的关键字和函数名等不区分大小写,但是对于数据值是否区分大小写,和字符集与校对规则有关。
ci(大小写不敏感),cs(大小写敏感),_bin(二元,即比较是基于字符编码的值而与language无关,区分大小写)
(2)命名时:尽量使用26个英文字母大小写,数字0-9,下划线,不要使用其他符号user_id
(3)建议不要使用mysql的关键字等来作为表名、字段名等,如果不小心使用,请在SQL语句中使用`(飘号)引起来
(4)数据库和表名、字段名等对象名中间不要包含空格
(5)同一个mysql软件中,数据库不能同名,同一个库中,表不能重名,同一个表中,字段不能重名
(6)标点符号:
- 必须成对
- 必须英文状态下半角输入方式
- 字符串和日期类型可以使用单引号’’
- 列的别名可以使用双引号"",给表名取别名不要使用双引号。取别名时as可以省略
- 如果列的别名没有包含空格,可以省略双引号,如果有空格双引号不能省略。
(7)SQL脚本中如何加注释
- 单行注释:#注释内容
- 单行注释:–空格注释内容 其中–后面的空格必须有
- 多行注释:/ 注释内容 /
#以下两句是一样的,不区分大小写
show databases;
SHOW DATABASES;
#创建表格
#create table student info(...); #表名错误,因为表名有空格
create table student_info(...);
#其中name使用``飘号,因为name和系统关键字或系统函数名等预定义标识符重名了。
CREATE TABLE t_stu(
id INT,
`name` VARCHAR(20)
);
select id as "编号", `name` as "姓名" from t_stu; #起别名时,as都可以省略
select id as 编号, `name` as 姓名 from t_stu; #如果字段别名中没有空格,那么可以省略""
select id as 编 号, `name` as 姓 名 from t_stu; #错误,如果字段别名中有空格,那么不能省略""
第二章-DDL操作数据库2.1、创建数据库(掌握)
- 语法
create database 数据库名 [character set 字符集][collate 校对规则] 注: []意思是可选的意思
字符集(charset):是一套符号和编码。
- 练习
创建一个day01的数据库(默认字符集)
create database day01;
创建一个day01_2的数据库,指定字符集为gbk(了解)
create database day01_2 character set gbk;
2.2、查看所有的数据库
- 查看所有的数据库
语法
show databases;
- 查看数据库的定义结构【了解】
语法
show create database 数据库名;
查看day01这个数据库的定义
show create database day01;
2.3、删除数据库
语法
drop database 数据库名;
删除day01_2数据库
drop database day01_2;
2.4、修改数据库【了解】
语法
alter database 数据库名 character set 字符集;
修改day01这个数据库的字符集(gbk)
alter database day01 character set gbk;
注意:
- 是utf8,不是utf-8
- 不是修改数据库名
切换数据库, 选定哪一个数据库
use 数据库名; //注意: 在创建表之前一定要指定数据库. use 数据库名
练习: 使用day01
use day01;
查看正在使用的数据库
select database();
第三章-DDL操作表3.1、创建表
- 语法create table 表名( 列名 类型 [约束], 列名 类型 [约束] ... );
- 类型
数值类型
整型系列:xxxInt
- int(M),必须和unsigned zerofill一起使用才有意义
浮点型系列:float,double(或real)
- double(M,D):表示最长为M位,其中小数点后D位例如:double(5,2)表示的数据范围[-999.99,999.99],如果超过这个范围会报错。定点型系列:decimal(底层实际上是使用字符串进行存储)
- decimal(M,D):表示最长为M位,其中小数点后D位
位类型:bit
- 字节范围是:1-8,值范围是:bit(1)~bit(64),默认bit(1)
用来存储二进制数。对于位字段,直接使用select命令将不会看到结果。可以使用bit()或hex()函数进行读取。插入bit类型字段时,使用bit()函数转为二进制值再插入,因为二进制码是“01”。
日期时间类型
日期时间类型:year, date, datetime, timestamp
注意一下每一种日期时间的表示范围
timestamp和datetime的区别:
- timestamp范围比较小
- timestamp和时区有关show variables like ‘time_zone’;set time_zone = ‘ 8:00’;
- timestamp受MySQL版本和服务器的SQLMode影响很大
- 表中的第一个非空的timestamp字段如果插入和更新为NULL则会自动设置为系统时间