数据库
数据库的操作
命令行连接
host -h 主机
port -P 端口号
user -u 用户名
password -p 密码
mysqld -hlocalhost -P3306 -uroot -proot
退出登录
exit
quit
\q
显示所有数据库
show databases;
注意:数据库安装后,自带4个数据库
创建数据库
create database [if not exists] 数据库名 [可选项];
创建数据库时,如果数据库已经存在,就会报错
在创建数据库时,判断数据库是否存在,不存在就创建
create database if not exists 数据库名;
特殊字符,关键字做数据库名,使用反引号``将数据库名括起来
创建数据库时,可以指定字符集,如果不指定编码,数据库默认使用安装数据库时指定的编码
create database emp charset=gbk;
MySQL
数据库的目录
数据库保存的路径在安装MySQL的时候就配置好。
也可以在my.ini配置文件中更改数据库的保存地址。
datadir="...."
一个数据库就对应一个文件夹,在文件夹中有一个db.opt文件,在此文件中设置数据库的字符集和校对集
删除数据库
drop database 数据库名;
删除关键字数据库
判断数据库如果存在则删除
显示创建数据库的语句
show create database 数据库名;
修改数据库
修改数据库的字符编码
alter database 数据库名 charset=字符编码;
小结:修改数据库只能修改数据库的字符编码
选择数据库
use 数据库名;
数据表的操作
显示所有表
show tables;
创建表
语法:
set names gbk; -- 设置客户端和服务器通讯的编码
create table [if not exists] `表名`(
`字段名` 数据类型 [null|not null] [default Value] [auto_increment] [primary key] [comment],
`字段名` 数据类型 [null|not null] [default Value] [auto_increment] [primary key] [comment],
......
)[engine=存储引擎] [charset=字符编码]
---------------------------------
null|notnull 是否为空
default Value 默认值
auto_increment 自动增长,默认从1开始,每次递增1
primary key 主键,主键的值不能为空,且不能重复
comment 备注
engine 引擎 myisam, innodb
----------------------------------
注意:如果表名和字段名使用了关键字的特殊字符,需要用反引号``引起来。
小结:
1、如果不指定引擎,默认是innodb
2、如果不指定字符编码,默认和数据库编码一致
数据表的文件
一个数据库对应一个文件夹
一个表对应一个或多个文件
myisam引擎 - 一个表对应3个文件
.frm 存储的是表结构
.myd 存储的是表数据
.myi 存储的是表数据的索引
innodb引擎 - 一个表对应一个表结构文件
显示创建表的语句
-- 结果横着排列
show create table 表名;
-- 结果竖着排列
show create table 表名\G;
查看表结构
describe 表名;
//或
desc 表名;
删除表
drop table 表名;
//如果存在就删除
drop table if exists 表名;
//一次删除多个表
drop table 表一,表二,...;
复制表
-- 语法一
create table 新表名 select 字段 from 旧表
-- 特点:不能复制父表的键,能够复制父表的数据
-- 语法二
create table 新表名 like 旧表;
-- 特点:只能复制表结构,不能复制表数据
修改表
语法: alter table 表名
-- --------------------
1. 添加字段:alter table 表名 add[column] 字段名 数据类型 [位置]
例如:alter table student add sex char(1) after name;
//在name字段后添加一个sex字段;长度为1的字符
例如:alter table student add sex char(1) first;
//在第一个字段添加一个sex字段;长度为1的字符
2. 删除字段:alter table 表名 drop[column] 字段名
3. 修改字段(改名):alter table 表名 change[column] 原字段名 新字段名 数据类型...
4. 修改字段(不改名):alter table 表名 modify 字段名 字段属性
5. 修改引擎:alter table 表名 engine=引擎名
6. 修改表名:alter table 表名 rename to 新表名
7. 将表移动到其他数据库:alter table 表名 rename to 数据库名.新表名
例如:alter table student rename to `user`.student;
//将当前数据库下的student表移动到user数据库下,改名为student
数据的操作
插入数据
insert into 表名(字段名,字段名,...) values (值1, 值2,...);
-- 可以插入所有字段
-- 可以插入部分字段
-- 插入的字段和表的字段顺序可以不一致,但是插入字段名和插入的值一定要一一对应
-- 插入字段名可以省略
-- 自动增长列,可以直接插入null
-- 插入多个值
insert into 表名 (字段名1, 字段名2,....) values (值1, 值2, ...), (值1, 值2, ...);
更新数据
-- 更新某个数据
update 表名 set 字段=值 [where条件]
删除数据
delete from 表名 [where条件];
多学一招:delete from 表 和 truncate table 表区别?
1. delete from 表 : 遍历表记录,一条一条的删除
2. truncate table 表 : 将原表销毁,再创建一个同结构的新表,就清空表而言,这种方法效率高
数据传输时的字符集
发现:在数据表中插入数据时,如果有中文,则会报错(或者中文无法插入)
客户端编码:
查看服务器接受,返回的编码:
更改接收客户端指令的编码:
set character_set_client=gbk;
设置返回值的字符编码:
set character_set_results=gbk;
-- 可以通过set names一次性设置编码
set names utf8; -- 此语句相当于下面三句
set character_set_client=gbk;
set character_set_connection=gbk;
set character_set_results=gbk;
282923250)]
更改接收客户端指令的编码:
set character_set_client=gbk;
设置返回值的字符编码:
set character_set_results=gbk;
-- 可以通过set names一次性设置编码
set names utf8; -- 此语句相当于下面三句
set character_set_client=gbk;
set character_set_connection=gbk;
set character_set_results=gbk;