1.创建表
语法:(不区分大小写)
drop table if exists 表名; // 当这个表存在的话,删除它
create table 表名(
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型,
...
);
// 字段1是主键不为空 字段名2(部分插入)不插入数据时默认为1
create table 表名(
字段名1 数据类型 primary key not null,
字段名2 数据类型 default 1,
字段名3 数据类型,
...
);
// unsigned:非负数,用此类型可以增加数据长度 auto_increment:自动递增
create table if not exists 表名(
字段名1 数据类型 unsigned auto_increment,
字段名2 数据类型 not null,
primary key(字段名1)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
engine=innoDB:将数据库的引擎设置为InnoDB,从MySQL 5.6开始默认使用该引擎
default charset=utf8:设置数据库的默认字符为utf8
字段的数据类型
类型 | |
---|---|
int | 整数型 |
bigint | 长整型 |
float | 浮点型 |
char | 定长字符串型 |
varchar | 可変长字符串型 |
data | 日期型 |
BLOB | 二进制大对象型:存储图片、视频等流媒体信息 Binary Large OBject |
CLOB | 字符大对象型:存储较大文本,比如,可以存储4G的字符串 Character Large OBject |
1.1 char和varchar怎么选择
在实际的开发中,当某个字段中的数据长度不发生改变的时候,是定长的,例如:性别、生日等都是采用
char
当一个字段的数据长度不确定,例如:简介、姓名等都是采用varchar
1.2 表的复制
语法:
create table 表名 as select语句; // 将查询结果当做表创建出来
mysql> create table emp2 as select empno,ename from emp;
Query OK, 14 rows affected (0.60 sec)
Records: 14 Duplicates: 0 Warnings: 0
mysql> select * from emp2;
+-------+--------+
| empno | ename |
+-------+--------+
| 7369 | SMITH |
| 7499 | ALLEN |
| 7521 | WARD |
| 7566 | JONES |
| 7654 | MARTIN |
| 7698 | BLAKE |
| 7782 | CLARK |
| 7788 | SCOTT |
| 7839 | KING |
| 7844 | TURNER |
| 7876 | ADAMS |
| 7900 | JAMES |
| 7902 | FORD |
| 7934 | MILLER |
+-------+--------+
14 rows in set (0.00 sec)
2. 新增数据
语法:
insert into 表名(字段名1,字段名2,字段名3) values(值1,值2,值3);
insert into 表名 values(值1,值2,值3); // 顺序需要按照表来,不能部分插入
insert into 表名(字段名1,字段名2,字段名3) values(值1,值2,值3),(值1,值2,值3),(值1,值2,值3); // 插入多行数据
insert into dept1 select * from dept; // 将dept的查询结果插入到dept1表中
字段的数量和值的数量相同,并且数据类型要对应相同
写部分字段:当表中含的比insert
的字段和值少时,其他字段自动为null
3. 修改
语法:
update 表名 set 字段名1=值1,字段名2=值2... where 条件;
mysql默认提交事务
4. 删除
语法:
delete from 表名 where 条件; // 根据条件从表中删除数据
没有条件全部删除
4.1 删除大表数据
truncate table 表名; // 表被截断,不可回滚。永久丢失
drop table 表名; // 这个通用
drop table if exists 表名; // oracle不支持这种写法
5. 查询
还有各种查询,这里不说了,之前讲过