数据库三层结构
普通表本质上仍然是文件
数据库简介
sql:用于操作数据库。
关系型数据库:由行(row)和列(column)组成。其中行是可变的,列(属性)是不变的。
一行称为一条记录。
SQL语句分类
数据库服务启动与登录
net mysql start
mysql -u root -p
数据库
数据库语句结尾需要添加分号; 而DOS命令行下和结尾不能有分号。
- 创建数据库
CREATE DATABASE [IF NOT EXISTS] name CHARACTER SET utf8 COLLATE utf8_bin(区分大小写);
在创建数据库或者表的时候可以使用反引号规避关键字,删除的时候也需要加上反引号。
CREATE DATABASE `INT`;
不写后面的,默认:
- 字符集默认为utf8
- 数据库校对规则默认为utf_general_ci(不区分大小写)
注意:若在创建表的时候没有指定字符集和校对规则,则表默认跟随数据库的规则。
- 删除数据库(慎重)
DROP DATABASE name;
- 显示数据库
SHOW DATABASES;
#注意一定要加S
- 显示某数据库创建的语句信息
SHOW CREATE DATEBASE name;
- 数据库备份(DOS执行)命令行
mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql(路径)
- 数据库恢复(需要在mysql命令行执行)
source 文件名.sql(路径)
或者:直接将文件.sql的内容放入查询编辑器(SQLyog中的)中执行。
- 数据库的表恢复
mysqldump -u 用户名 -p 数据库 表1 表2 表n > 文件名.sql(路径)
表
- 创建表:
CREATE TABLE name
(
field1 datatype,
field2 datatype,
field3 datatype
)character set 字符集 collate 校验规则 engine 储存引擎
注:field:指定列名。datatype指定列数据类型。字符集,校验,引擎->(不指定默认跟随数据库)
定义无符号整数:
CREATE TABLE t1(id tinyint);//默认是有符号的: 0 - 255
CREATE TABLE t1(id tinyint unsigned);//默认是无符号的 :-128 - 127
- 显示表:
SHOW TABLES;
- 删除表
DROP TABLE name;
- 修改表
- 添加列
ALTER TABLE name ADD(column datatype NOT NULL DEFULT '',othercolum datatype);
//添加一个列的时候,可以指定添加的位置,到colname后
ALTER TABLE name ADD column datatype NOT NULL DEFAULT '' AFTER colname;
- 修改列
ALTER TABLE tablename MODIFY column datatype;//注意只能一个一个修改
- 删除列
ALTER TABLE tablename DROP colname字段;//只能一个一个删
- 修改列名
ALTER TABLE tablename CHANGE colname othercolname 数据类型 NOT NULL DEFAULT '';
//注意colname到othercolname中间没有to
- 修改表的字符集
ALTER TABLE name charset 字符集;
- 修改表名
RENAME TABLE name to newname;
- 查看表的结构
desc name;
- 复制表的结构
CREATE TABLE my_table2 LIKE emp; //将emp表的结构复制给my_table表
- 表的复制和去重
- 表的复制
//将emp表的记录复制到my_table表
CREATE TABLE my_table(
id INT,
`name` VARCHAR(32),
sal DOUBLE,
deptno INT
);
SELECT *FROM my_table;
INSERT INTO my_table (id,`name`,sal,deptno)
SELECT empno,ename,sal,deptno FROM emp;
//表的自我复制(记录成倍增长)
INSERT INTO my_table
SELECT *FROM my_table
- 表的去重
//1.创建一个临时表,并复制emp表结构
CREATE TABLE temp LIKE emp;
//2.将emp表的记录去重复制到临时表
INSERT into temp SELECT DISTINCT * FROM emp;
//3.删除emp表的记录
DELETE FROM emp;
//4.将临时表的记录复制到emp
INSERT into emp SELECT * FROM temp;
DROP TABLE temp;
Mysql数据类型
- 小数
FLOAT/DOUBLE [UNSIGNED]
DECIMAL[M,D][UNSIGNED] //M表示小数位数总数默认为10,最大为64。D表示小数点后面的位数默认为0&#x