1.建库建表语法
#建库
create database if not exists dataname defaule charset utf8;
#建表
create table if not exists runoob_tbl(
runoob_id int primary key auto_increment,
runoob_title varchar(20) not null,
runoob_author varchar(20) not null,
submission_date date not null
)
2、字段数据类型
MySQL中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL支持多种数据类型,大致分为三大类:数值、日期\时间和字符串(字符类型)。
一、 数值类型
类型 | 大小 | 范围 | 用途 |
---|---|---|---|
INT | 4 bytes | (-2147483648 , 2147483647) | 大整数值 |
FLOAT | 4 bytes | (3.4e-38,3.4e38) | 单精度 浮点数 |
DOUBLE | 8 bytes | (1.7e-308,1.7e308) | 双精度 浮点数 |
注:MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT
二、日期和时间类型
类型 | 大小 | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 bytes | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 bytes | '-838:59:59' / '838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 bytes | 1901 / 2155 | YYYY | 年份值 |
DATETIME | 8 bytes | 1000-01-0100:00:00/9999-12-3123:59:59 | YYYY-mm-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 bytes | 1970-01-01 00:00:00 / 2038 结束时间是第2147483647秒,北京时间2038-1-1911:14:07,格林尼治时间2038年1月19日凌晨03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
注:每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
三、字符串类型
类型 | 大小 | 用途 |
---|---|---|
char | 0-255 bytes | 定长字符 |
varchar | 0-65535 bytes | 定长字符串 |
test | 0-65535 bytes | 长文本数据 |
注:(1)char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,比如:char(30)就可以存储30个字符。char和varchar类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
(2)TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。对应的这4种BLOB类型,可存储的最大长度不同,可根据实际情况选择
3、增删改查语法
一、插入数据,我们将使用SQLINSERTINTO语句向MySQL数据表runoob_tbl插入数据
insert into runoob_tbl(runoob_title,runoob_author,submission_date)VALUES
("学习PHP","菜鸟教程",NOW()),
("学习MySQL","菜鸟教程",NOW()),
("JAVA教程","RUNOOB.COM","2016-05-06");
注:在以上实例中,我们并没有提供runoob_id的数据,因为该字段我们在创建表的时候已经设置它为auto_increment(自动增加)属性。所以,该字段会自动递增而不需要我们去设置。实例中now()是一个MySQL函数,该函数返回日期和时间。
二、 接下来查看数据,查询数据
select * from runoob_tbl;
输出结果:
三、删除数据
delete from runoob_tabl where runoob_id=3;
输出结果:
四、修改数据
update runoob_tbl set runoob_author="W3Cschool" where runoob_id=1;
输出结果:
4、表关联查询
一、表关联查询(两表,多表)
内连接 inner join
select * from A inner join B on A.id = B.id
左连接 left join
select * from A left join B on A.id = B.id
右连接 right join
select * from A right join B on A.id = B.id
全连接
MySQL Full Join的实现因为MySQL不支持FULL JOIN, 下面是替代方法 left join+union(可去除重复数据)+ right join select * from A left join B on A.id = B.id (where条件)union select * from A right join B on A.id = B.id (where条件);
二、联合查询union
SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;
注:默认地,UNION 操作符选取不同的值。如果允许重复的值请使用 UNION ALL。UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相 似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
三、嵌套子查询
select * from(select * from 表名)