初始化数据库
1.安装数据库,然后进到命令行初始化数据库
1.1 安装数据库服务
mysqld --install //安装mysql服务
1.2 初始化数据库
mysqld --initialize --console //初始化mysql服务
1.3链接数据库
初始化后的账号密码默认均为root
用户: root
密码: root
主机 -h host
端口 -P port
用户 -u user
密码 -p password
mysql -h127.0.0.1 -P33.6 -uroot -proot//链接数据库
如果是链接本地数据库 -h可以省略 如果端口是3306也可以省略
mysql -uroot -proot
1.4退出登录数据库
方法一 exit
方法二 quit
方法三 \q
1.5 创建一个数据库
show databases //显示所有数据库
CREATE DATABASE stu //stu是数据库名
//如果创建已经有的数据库就会报错
CREATE DATABASE 数据库名;
ERROR 2013 (HY000): Lost connection to MySQL server during query
--在数据库创建的时候判断是否已经创建,如果不存在就创建
create database if not exists 数据库名;
1.6 删除一个数据库
drop database stu;
--在数据库创建的时候判断是否已经存在,如果存在就删除
drop database if xists 数据库名
1.6.1 显示创建数据库语句
show create database 数据库名;
1.6.2 修改数据库字符编码
数据库只能修改字符编码
在mysql中uft字符编码直接没有横杠 utf8
alter database 数据库名 charset=字符编码;
创建表
模板
create table `表名`(
`字段名` 数据类型 ,
`字段名` 数据类型 ,
);
//数据类型
1.null | not null 是否为空
2.default 默认值
3.auto_increment 自动增长
4.primary key 主键、每个表必须要有一个主键
5.comment 备注
6.engline 引擎
实例
use stu//更改到当前数据库
set names gbk;//设置客户端与服务端通讯的字符编码
create table stu1(
id int auto_increment primary key ,
name varchar(20) not null
);
1.6.3 显示创建表数据
show create table;
1.6.4 查看表结构
desc stu ;
1.6.5 删除表
drop table stu;
删除多个表
drop table stu1,stu2,stu3
1.6.6 复制表
语法1
\\从stu1里面选择所有的数据放到stu2里面,但是不能复制键
create table 新表 select * from 旧表
语法2
只能复制表结构,不能复制表的数据
create table 新表 like 旧表
1.6.7 修改表
1.添加字段
alter table stu add `add` varchar(20);
2.删除字段
alter table stu1 drop 字段;
3.修改字段
alter table stu1 change 旧字段名称 新字段名称 varchar(10);
4.更改表名称
alter table 旧表名 rename to 新表名称
插入时无法插入中文字符:
原因:服务端返回的字符与客户端接收不一致
set names utf8
- 枚举(enum)
create table stu2(
-> name varchar(20),
-> sex enum('男','女','保密')
-> );
desc stu2
-> ;
+-------+----------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| sex | enum('男','女','保密') | YES | | NULL | |
+-------+----------------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
集成环境的mysql服务冲突解决
sc delete mysql
外键
create table stuinfo(
id tinyint primary key,
name varchar(10)
)engline=innodb;
create table stuscore(
sid tinyint primary key,
score tinyint unsigend,
foregin key(sid) references stuinfo(id) //创建外键:将本表的sid键作为stuinfo下的id的外键
)engline=innodb;
查询语句
1.7.0 条件查询 where
大于
< 小于
= 大于等于
<= 小于等于
= 等于
!= 不等于
– 逻辑运算符
and 与
or 或
not 非
– 其他
in | not in 字段的值在枚举范围内
between…and|not between…and 字段的值在数字范围内
is null | is not null 字段的值不为空
1.7.2 分组查询 group by
sum() 求和
avg() 平均分
count() 记录条数
max() 求最大数
min() 求最小数
查询男生和女生各自多少人
select stusex,count(*) 人数 from stu group by stusex;
每个地区的数学平均分
select stuaddress,avg(math) from stu group by stuaddress;
多列分组
select stuaddress,stusex,avg(math) from stu group by stuaddress,stusex;
通过group_concat()函数将同一组的值连接起来显示.
select group_concat(stuname),stusex,avg(math) from stu group by stusex;
注意:
1、如果是分组查询,查询字段是分组字段和聚合函数。
2、查询字段是普通字段,只取第一个值
3、group_concat()将同一组的数据连接起来
1.7.3 排序查询 order by
关键字
asc:升序【默认】
desc:降序
按年龄的升序排列
select * from stu order by stuage asc;
select * from stu order by stuage; -- 默认是升序
多列排序
年龄升序,如果年龄一样,按ch降序排列
select * from stu order by stuage asc,ch desc;
1.7.4 limit
语法:limit [起始位置],显示长度
从第0个位置开始取,取3条记录
select * from stu limit 0,3;
从第2个位置开始取,取3条记录
select * from stu limit 2,3;
起始位置可以省略,默认是从0开始
找出班级总分前三名
select *,ch+math total from stu order by (ch+math) desc limit 0,3;
1.7.5 查询语句中的选项
- all 显示所有的选项(默认)
- distinct 去除重复的选项
select all stuaddress from stu;
-- 去除重复的项
select distinct stuaddress from stu;
1.7.6 通配符
- _ [下划线] 表示任意一个字符
- % 表示任意字符
模糊查询的条件不能用’=’,要使用like。
select * from stu where stuname like 'T_m';
-- 查询姓张的学生
mysql> select * from stu where stuname like '张%';
1.8 union(联合)
作用:将多个select语句结果集纵向联合起来
union的选项有两个
1、 all:显示所有数据
2、 distinct:去除重复的数据【默认】
mysql> select * from stu where stuaddress='上海' and stusex='男' union select * from stu where stuaddress='北京' and stusex='女';
多表查询
数据库备份与还原
数据库备份
将emoticon数据库中所有的表导出到emoticon。sql中
mysqldump -uroot -proot emoticon>c:\emoticon.sql
单独导出数据库中的某张表
mysqldump -uroot -proot emoticon stu stuname>c:\emoticon.sql
导出数据库,带有创建数据库的语法
mysqldump -uroot -proot -B emoticon>c:\emoticon.sql
数据库还原
需要登录
source c:/emoticon.sql;
不需要登录
mysql -uroot -proot emoticon < c:\emoticon.sql;