DML增删改以及表的创建删除

1、创建表:

建表语句的语法格式:
	create table 表名(
		字段名1 数据类型,
		字段名2 数据类型,
		字段名3 数据类型,
		....
	);

MySQL当中字段常见的数据类型:
	int		整数型(java中的int)
	bigint		长整型(java中的long)
	float		浮点型(java中的float double)
	char		定长字符串(String)
	varchar		可变长字符串(StringBuffer/StringBuilder)
	date		日期类型 (对应Java中的java.sql.Date类型)
	BLOB		二进制大对象(存储图片、视频等流媒体信息) Binary Large OBject (对应java中的Object)
	CLOB		字符大对象(存储较大文本,比如,可以存储4G的字符串。) Character Large OBject(对应java中的Object)
	......

charvarchar怎么选择?
	在实际的开发中,当某个字段中的数据长度不发生改变的时候,是定长的,例如:性别、生日等都是采用char。
	当一个字段的数据长度不确定,例如:简介、姓名等都是采用varchar。

表名在数据库当中一般建议以:t_或者tbl_开始。

创建学生表:
	学生信息包括:
		学号、姓名、性别、班级编号、生日
		学号:bigint
		姓名:varchar
		性别:char
		班级编号:int
		生日:char
	
	create table t_student(
		no bigint,
		name varchar(255),  // 给定最大长度
		sex char(1),        // 给出固定长度
		classno varchar(255),
		birth char(10)
	);

2、insert语句插入数据

语法格式:
	insert into 表名(字段名1,字段名2,字段名3,....) values(1,2,3,....)
	要求:字段的数量和值的数量相同,并且数据类型要对应相同。

值与类型不匹配:
	insert into t_student(no,name,sex,classno,birth) values(1,'zhangsan','1','gaosan1ban'); // ERROR 1136 (21S01): Column count doesn't match value count at row 1

规范操作:
	insert into t_student(no,name,sex,classno,birth) values(1,'zhangsan','1','gaosan1ban', '1950-10-12');

	mysql> select * from t_student;
	+------+----------+------+------------+------------+
	| no   | name     | sex  | classno    | birth      |
	+------+----------+------+------------+------------+
	|    1 | zhangsan | 1    | gaosan1ban | 1950-10-12 |
	+------+----------+------+------------+------------+

字段名位置可改变,但值的位置也需相应改变,需要一一对应:
	insert into t_student(name,sex,classno,birth,no) values('lisi','1','gaosan1ban', '1950-10-12',2);

	mysql> select * from t_student;
	+------+----------+------+------------+------------+
	| no   | name     | sex  | classno    | birth      |
	+------+----------+------+------------+------------+
	|    1 | zhangsan | 1    | gaosan1ban | 1950-10-12 |
	|    2 | lisi     | 1    | gaosan1ban | 1950-10-12 |
	+------+----------+------+------------+------------+

只插入一个字段的数据,则其他字段为nullinsert into t_student(name) values('wangwu'); // 除name字段之外,剩下的所有字段自动插入NULL。
	mysql> select * from t_student;
	+------+----------+------+------------+------------+
	| no   | name     | sex  | classno    | birth      |
	+------+----------+------+------------+------------+
	|    1 | zhangsan | 1    | gaosan1ban | 1950-10-12 |
	|    2 | lisi     | 1    | gaosan1ban | 1950-10-12 |
	| NULL | wangwu   | NULL | NULL       | NULL       |
	+------+----------+------+------------+------------+


当这个表存在的话删除:
	drop table if exists t_student; 
重新创建:
	create table t_student(
		no bigint,
		name varchar(255),
		sex char(1) default 1,
		classno varchar(255),
		birth char(10)
	);

需要注意的地方:
	当一条insert语句执行成功之后,表格当中必然会多一行记录。
	即使多的这一行记录当中某些字段是NULL,后期也没有办法在执行
	insert语句插入数据了,只能使用update进行更新。

字段可以省略不写,但是后面的value对数量和顺序都有要求:
	insert into t_student values(1,'jack','0','gaosan2ban','1986-10-23');
	mysql> select * from t_student;
	+------+----------+------+------------+------------+
	| no   | name     | sex  | classno    | birth      |
	+------+----------+------+------------+------------+
	| NULL | zhangsan | 1    | NULL       | NULL       |
	|    1 | jack     | 0    | gaosan2ban | 1986-10-23 |
	+------+----------+------+------------+------------+

数量不足或顺序不对都不行:
	insert into t_student values(1,'jack','0','gaosan2ban'); // ERROR 1136 (21S01): Column count doesn't match value count at row 1

一次插入多行数据:
	insert into t_student
		(no,name,sex,classno,birth) 
	values
		(3,'rose','1','gaosi2ban','1952-12-14'),
		(4,'laotie','1','gaosi2ban','1955-12-14');

	mysql> select * from t_student;
	+------+----------+------+------------+------------+
	| no   | name     | sex  | classno    | birth      |
	+------+----------+------+------------+------------+
	| NULL | zhangsan | 1    | NULL       | NULL       |
	|    1 | jack     | 0    | gaosan2ban | 1986-10-23 |
	|    3 | rose     | 1    | gaosi2ban  | 1952-12-14 |
	|    4 | laotie   | 1    | gaosi2ban  | 1955-12-14 |
	+------+----------+------+------------+------------+

3、表的复制:

语法:
	create table 表名 as select语句;
	将查询结果当做表创建出来。

4、将查询结果插入到一张表中:

mysql> insert into dept1 select * from dept;
mysql> select * from dept1;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+

5、修改数据:update

语法格式:
	update 表名 set 字段名1=1,字段名2=2... where 条件;

注意:没有条件整张表数据全部更新。

案例:将部门10的LOC修改为SHANGHAI,将部门名称修改为RENSHIBU
	update dept1 set loc = 'SHANGHAI', dname = 'RENSHIBU' where deptno = 10;
	mysql> select * from dept1;
	+--------+------------+----------+
	| DEPTNO | DNAME      | LOC      |
	+--------+------------+----------+
	|     10 | RENSHIBU   | SHANGHAI |
	|     20 | RESEARCH   | DALLAS   |
	|     30 | SALES      | CHICAGO  |
	|     40 | OPERATIONS | BOSTON   |
	|     10 | RENSHIBU   | SHANGHAI |
	|     20 | RESEARCH   | DALLAS   |
	|     30 | SALES      | CHICAGO  |
	|     40 | OPERATIONS | BOSTON   |
	+--------+------------+----------+

    更新所有记录:
	update dept1 set loc = 'x', dname = 'y';
	mysql> select * from dept1;
	+--------+-------+------+
	| DEPTNO | DNAME | LOC  |
	+--------+-------+------+
	|     10 | y     | x    |
	|     20 | y     | x    |
	|     30 | y     | x    |
	|     40 | y     | x    |
	|     10 | y     | x    |
	|     20 | y     | x    |
	|     30 | y     | x    |
	|     40 | y     | x    |
	+--------+-------+------+

6、删除数据?

语法格式:
	delete from 表名 where 条件;

注意:没有条件全部删除。

删除部门10的数据:
	delete from dept1 where deptno = 10;

删除所有记录?
	delete from dept1;

怎么删除大表中的数据?(重点)
	truncate table 表名; // 表被截断,不可回滚。永久丢失。
删除表?
	drop table 表名; // 这个通用。
	drop table if exists 表名; // oracle不支持这种写法。

7、增删改查有一个术语:CRUD操作
Create(增) Retrieve(检索) Update(修改) Delete(删除)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值