启动:net start mysql;
关闭:net stop mysql;
创建数据库:
语法:
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]
~创建一个名称为mydb1的数据库。
CREATE DATABASE mydb1;
~创建一个使用gbk字符集的mydb2数据库。
CREATE DATABASE mydb2 CHARACTER SET gbk;
~创建一个使用utf8字符集,并带校对规则的mydb3数据库。
CREATE DATABASE mydb3 CHARACTER SET utf8 COLLATE utf8_bin;
查看数据库:
语法:
显示所有数据库: SHOW DATABASES
显示数据库创建语句: SHOW CREATE DATABASE db_name
~查看当前数据库服务器中的所有数据库
SHOW DATABASES;
~查看前面创建的mydb2数据库的定义信息
SHOW CREATE DATABASE mydb2;
修改数据库:
语法:
ALTER DATABASE [IF NOT EXISTS] db_name [alter_specification [, alter_specification] ...]
alter_specification: [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name
~查看服务器中的数据库,并把mydb2库的字符集修改为utf8
ALTER DATABASE mydb2 CHARACTER SET utf8;
删除数据库:
语法:
DROP DATABASE [IF EXISTS] db_name
~删除前面创建的mydb1数据库
DROP DATABASE mydb1;
选择数据库:
语法:
选择数据库:use db_name;
查询当前选择的数据: select database();
新增表:
语法:
CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype )[character set 字符集] [collate 校对规则] field:指定列名 datatype:指定列类型
create table employee(
id int primary key auto_increment,
name varchar(20) unique,
gender bit not null,
birthday date,
entry_date date,
job varchar(100),
salary double,
resume text
);
查看表:
语法:
查看表结构:desc tabName
查看当前所有表:show tables
查看当前数据库表建表语句 :show create table tabName;
修改表:
语法:
增加列:ALTER TABLE tabname ADD (column datatype [DEFAULT expr][, column datatype]...);
修改列:ALTER TABLE tabname MODIFY (column datatype [DEFAULT expr][, column datatype]...);
删除列:ALTER TABLE tabname DROP (column);
修改表名:ALTER TABLE old_tabname RENAME TO new_tabname;
或
RENAME TABLE old_tabname TO new_tabname;
修改列名称:ALTER TABLE tabname CHANGE [column] old_col_name new_col_name datatype
修改列的顺序:ALTER TABLE tabname MODIFY col_name1 datatype AFTER col_name2;
修改表的字符集:ALTER TABLE tabname CHARACTER SET character_name;
~在上面员工表的基础上增加一个image列。
alter table employee add image blob;
~修改job列,使其长度为60。
alter table employee modify job varchar(60);
~删除gender列。
alter table employee drop gender;
~表名改为user。
alter table employee rename to user;
或
rename table employee to user;
~列名name修改为username
alter table user change name username varchar(20);
~将image插入到gender列的后面
alter table user modify image blob after gender;
~修改表的字符集为utf8
alter table user character set utf8;
删除表:
语法:
DROP TABLE tabname;
~删除user表
drop table user;
操作表记录:
语法:
INSERT INTO tabname [(column [, column...])] VALUES (value [, value...]);
~向员工表中插入三条数据
insert into employee (id,name,gender,birthday,entry_date,job,salary,resume)
values
(null,'张飞',1,'1990-09-09','2000-01-01','打手',998.0,'真的很能打...');
insert into employee
values
(null,'关羽',0,'1990-08-08','1990-08-09','财神',9999999.0,'公司挣钱就指着他了...');
insert into employee
values
(null,'刘备',1,'1990-06-06','1990-09-09','ceo',10.0,'公司的 ceo,基本没啥事干..'),
(null,'赵云',1,'2010-06-01','2010-06-01','保镖',400.0,'老板的 贴身护卫...');
mysql乱码解决:
查看当前数据库中字符集配置:
show variables like'character%';
其中:
client是客户端使用的字符集。
connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。
database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
server是服务器安装时指定的默认字符集设定。
system是数据库系统使用的字符集设定。(utf-8不可修改)
UPDATE:
语法:
UPDATE tab_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。
SELECT:
语法:
(1)基本的查询:
SELECT [DISTINCT] *|{column1, column2. column3..} FROM table;
(2)使用where子句的查询:
Select *|列名 from tablename [WHERE where_definition]
(3)排序查询:
SELECT column1, column2. column3.. FROM table order by column asc|desc;
Asc 升序、Desc 降序
ORDER BY 子句应位于SELECT语句的结尾。
(4)聚合函数:
求符合条件的记录中指定列的记录数
select count(列名)… from tablename [WHERE where_definition]
求符合条件的记录中指定列的和值
Select sum(列名)… from tablename [WHERE where_definition]
求符合条件的记录中指定列的平均值
Select avg (列名)… from tablename [WHERE where_definition]
求符合条件的记录中指定列的最大值
Select max(列名)… from tablename [WHERE where_definition]
求符合条件的记录中指定列的最小值
Select min(列名)… from tablename [WHERE where_definition]
(5)分组查询:
SELECT column1, column2. column3.. FROM table group by column having ...
select 指定查询哪些列的数据。
column指定列名。
*号代表查询所有列。
from指定查询哪张表。
DISTINCT可选,指显示结果时,是否剔除重复数据
mysql数据库的备份与恢复:
备份数据库:
cmd窗口中使用mysqldump 备份数据库
mysqldump -u root -p db_name > c:/xxx.sql
例如:mysqldump -u root -p mydb2 > c:/mydb2.sql
恢复数据库:
方式1:cmd窗口中使用mysql命令 恢复数据库,注意,只能恢复数据库中的数据,不能恢复数据库本身!所以要提前建好数据库.
mysql -u root -p db_name < c:/xxx.sql
例如:mysql -u root -p mydb2 < c:/mydb2.sql
方式2:在mysql命令下,source xxx.sql,这个命令的作用就是,在当前位置执行sql文件中的所有的sql.首先新建出数据库,进入数据库,在source执行备份的sql文件即可。
例如:source c:/xxx.sql
注意:如果在cmd窗口下,执行出现“拒绝访问”提示,用管理员打开cmd窗口即可。
外键约束:
建表时增加外键:
foreign key(ordersid) references orders(id)
修改方式增加外键:
alter table book add [constraint FK_BOOK] foreign key(pubid) references pub_com(id) [on delete restrict] [on update restrict];
可以明确指定外键的名称,如果不指定外键的名称,mysql会自动为你创建一个外键名称。
RESTRICT : 只要本表格里面有指向主表的数据, 在主表里面就无法删除相关记录。
CASCADE : 如果在foreign key 所指向的那个表里面删除一条记录,那么在此表里面的跟那个key一样的所有记录都会一同删掉。
删除外键:
alter table 表名 drop foreign key 外键名
实验外键
多表设计
一对一表和表之间的关系分为三种,分别是1对1、1对多、多对多,
多表查询:
多表查询设计
笛卡尔积查询:
这是一种最原始的查询方式,其实就是两张表相乘的结果,如果左表有m条记录,右表有n条记录,则查询出来m*n条记录.虽然查出数据了,但是其中包含了大量错误的数据,所以这种查询我们通常不使用。
内连接查询:
select * from dept ,emp where dept.id = emp.dept_id;
select * from dept inner join emp on dept.id = emp.dept_id;
外连接查询:
(1)左外连接查询:在内连接的基础上增加上左边表有而有边表没有的记录
select * from dept left join emp on dept.id = emp.dept_id;
(2)右外连接查询:在内连接的基础上增加上右边表有而左边表没有的记录
select * from dept right join emp on dept.id = emp.dept_id;
(3)全外连接查询:在内连接的基础上增加左边表有而右边表没有的记录和右边表有而左边表没有的记录
#我们可以在mysql中使用union关键字模拟全外连接
select * from dept left join emp on dept.id = emp.dept_id
union
select * from dept right join emp on dept.id = emp.dept_id;