一、创建并导入数据库
create database if not exists yiibaidb default charset utf8 collate utf8_general_ci; use yiibaidb; source /home/jxc/Downloads/yiibaidb.sql;
这里我们使用的是yiibaidb下载这个汽车零售商数据库模型,yiibaidb数据库由以下表组成
- customers: 存储客户的数据。
- products: 存储汽车的数据
- productLines: 存储产品类别数据。
- orders: 存储客户订购的销售订单。
- orderDetails: 存储每个销售订单的订单产品数据项。
- payments: 存储客户订单的付款数据信息。
- employees: 存储所有员工信息以及组织结构,例如,直接上级
- offices: 存储销售处数据,类似于各个分公司。
表与表之间的关系见下图:
在Linux下导出数据库,可以使用mysqldump的shell命令,格式如下:
mysqldump -u 数据库拥有者 -p 数据库名 [ 表名 ] > 输出文件名(最好用全路径)
mysqldump -u root -p test Data > /home/jxc/Documents/Data.sql
二、select语句简介
select语句可以从视图或表中获取数据,select语句的语法如下
SELECT column_1, column_2, ... FROM table_1 [INNER | LEFT |RIGHT] JOIN table_2 ON conditions WHERE conditions GROUP BY column_1 HAVING group_conditions ORDER BY column_1 LIMIT offset, length;
select语句由以下列表中所述的几个子句组成:
- SELECT 之后是逗号分隔列或者星号,表示要返回的列
- FROM 指定要查询的表或视图
- JOIN 根据某些链接条件从其他表中获取数据
- WHERE 过滤结果集中的行
- GROUP BY 把查询结果按指定的列分成集合组,当一个聚合函数和一个GROUP BY子句一起使用时,聚合函数的范围变成每组的所有记录。
- HAVING 对GROUP BY产生的分组进行进一步的控制,用这个子句定义这些分组所必须满足的条件
- ORDER BY 用于对查询结果进行排序
- LIMIT 限制返回的行数
说明:当where、group by和having子句同时出现在一个查询中时,SQL的执行顺序如下:
- 执行where子句,从表中选择行
- 由group by 对选取的行进行分组
- 执行聚合函数
- 执行having子句选取满足条件的分组
例子:从employees表中获取办公室代码为1的销售代表员工,可以使用以下查询:
select lastName,firstName,jobtitle from employees where jobtitle = 'Sales Rep' AND officeCode = '1';
还有一些有用的运算符可以子啊where子句中使用来形成复杂的条件,如:
- BETWEEN A NAD B: 选择在给定范围值内的值。
- LIKE: 匹配基于模式匹配的值,SQL提供了两个通配符与LIKE一起使用:百分比符号(%)匹配任何字符的零个或多个字符,下划线(_)匹配任何单个字符一次。
- IN: 指定值是否匹配列表中的任何值。
IS NULL
: 检查该值是否为NULL
。
三、INSERT语句简介
SELECT语句允许将一行或多行插入到表中,其基本语法如下:
insert into table(column1,column2...) values ( vslue1,value2,...);
创建一个新的名为tasks的表来练习insert语句:
create database test; use test; create table if not exists tasks( task_id int(11) auto_incerment, subject varchar(45) default null, start_date date null, end_date date default null, description varchar(200) default null, primary key (task_id) )engine=InnoDB default carset=utf8;
如果要将数据插入到tasks表中,可以使用如下语句:
insert into tasks(task_id,subject,start_date,end_date,description) values(1,'Learn MySQL INSERT','2017-09-15','2017-10-01','Start learning...');
四、UPDATE 和 DELETE 语句简介
update 可以用来跟新表中现有的数据,其基本语法如下:
update table_name set column_name1 = expr1, column_name2 = expr2, ... where condition
例如,我们要把tasks表中的第一条数据的description改为‘Description’:
use testdb update tasks set secription = 'Description' where task_id = 1
delete 语句可以从表中删除数据,其基本语法如下:
delete from table_name where condition
五、数据库的创建与删除
1.创建数据库使用 create database语句,语法如下:
create database [ if not exists ] database_name;
2.删除数据库使用 drop database 语句,语法如下:
drop database [ if exists ] database_name
3.显示和使用数据库:
show databases; use database_name;
六、表的创建与修改
1.使用 create table 语句来创建表,其基本语法如下:
create table [ if not exists ] table_name( column_list ) engine=table_type;
说明:
- 表名在一个数据库中必须时唯一,不能有同名的表存在
- column_list 指定表的列,为表定义列,至少要包含列名和数据类型。其语法为:
column_name data_type[ size ] [ not null | null ] [default value ] [ auto_increment ]
- coloumn_name 指定列的名称,列具有特定的数据类型和大小,这些都必须指定
- not null 或 null 指定该列是否接受null值
- default 用于指定列的默认值
- auto_increment 指定每当新行插入表中时,列值自动增加
- engine 指定表的存储引擎,默认为InnoDB,也可以使用其他存储引擎,如:InnoDB,MyISAM,HEAP,EXAMPLE,CSV,ARCHIVE,MERGE, FEDERATED或NDBCLUSTER
- 使用primary key ( col1,col2 ) 可以将某些列设置为主键
2.使用alter table 语句可以更改表的结构,该语句可以用来添加列、删除列、更改列的数据结构、添加主键、重命名表等。基本语法格式如下:
altre table table_name action
action表示要对标进行的操作,可以是命令:
语句 | 作用 |
---|---|
change column 列名 数据类型或其他属性修改 | 修改指定列名的相关属性 |
add column 列名 相关属性 | 添加新的列 |
rename to new_name | 重命名表 |