(一)语法格式
create table 表名(字段名1 数据类型,字段名2 数据类型...);
或
create table 表名(
字段名 1 数据类型,
字段名 2 数据类型,
字段名3 数据类型
);
说明:
① 表名:建议以t_或者tbl_开头,可读性强,见名知意。
② 字段名:见名知意。
③ 表名和字段名都属于标识符
(二)MYSQL中常见的基本数据类型
数据类型 | 说明 |
varchar | 可变长度字符串,可以实际的数据长度动态分配空间(最长255位) 优点:节省空间 缺点:需要动态的分配空间,速度慢 |
char | 定长字符串,分配固定长度去存储数据,使用不当会造成空间的浪费(最长255) 优点: 不需要动态分配空间,速度快 缺点: 使用不恰当会导致空间的浪费 |
int | 数字中的整数型,等同于java中的int(最长11位) |
bigint | 数字中的长整型,等同于java中的long |
double | 双精度浮点型整数 |
date | 短日期 类型 |
datetime | 长日期类型 |
clob | Character Large Object :Clob 字符大对象,最多可以存储4G的字符串 超过255个字符的都要采用CLOB字符大对象来进行存储 |
blob | Binary Large OBject 二进制大对象 专门用来存储图片、声音、视频等流媒体数据(通过IO流) |
enum | 接受最多64k个串组成的一个预定义的集合的某个串 |
longtext | 与text相同,但是最大长度为4GB |
mediumtext | 与text相同,但是最大长度为16K |
set | 接受最多64组成的一个预定义集合的零个或多个串 |
text | 最大长度为64k的变长文本 |
tinytext | 与text相同,但最大长度为255字节 |
实际举例:
t_move 电影表(专门用来存放电影信息)
编号 名字 描述信息 上映日期
no(bigint) name(varchar) descrpition(clob) playtime(date)
-----------------------------------------------------------------------------
10003 《战狼2》 爱国大片 2017.7.27
创建一个学生表,包括 学号、姓名、年龄、邮箱地址
mysql> create table t_student(
no int,
name varchar(32),
sex char(1),
age int(3),
email varchar(255)
);
#创建成功
Query OK, 0 rows affected, 1 warning (0.04 sec)
mysql> show tables;
+-----------------------+
| Tables_in_bjpowernode |
+-----------------------+
| bjpowernode |
| dept |
| emp |
| salgrade |
| t_student |
+-----------------------+
5 rows in set (0.00 sec)
(三)操作演示
(1)创建表
mysql> create table t_student(
no int,
name varchar(32),
sex char(1),
age int(3),
email varchar(255)
);
#创建成功
Query OK, 0 rows affected, 1 warning (0.04 sec)
(2)删除表
格式一: drop 表名
格式二:drop table if exists 表名(优先使用)
说明:对于格式一,如果表存在,会直接删除,但是如果不存在,就会报错
对于格式二,仅当表存在时候,将其删除,即使表不存在,也不会报错
#方式一(表存在删除)
mysql> drop table t_student;
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+-----------------------+
| Tables_in_bjpowernode |
+-----------------------+
| bjpowernode |
| dept |
| emp |
| salgrade |
+-----------------------+
4 rows in set (0.00 sec)
#方式一(表不存在时删除)
mysql> drop table t_student;
ERROR 1051 (42S02): Unknown table 'bjpowernode.t_student'
mysql> create table t_student(no int,name varchar(32),sex char(1),age int(3),email varchar(255));
Query OK, 0 rows affected, 1 warning (0.02 sec)
#方式二(表存在时删除)
mysql> drop table if exists t_student;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+-----------------------+
| Tables_in_bjpowernode |
+-----------------------+
| bjpowernode |
| dept |
| emp |
| salgrade |
+-----------------------+
4 rows in set (0.00 sec)
#方式二(表不存在时候删除)
mysql> drop table if exists t_student;
Query OK, 0 rows affected, 1 warning (0.00 sec)
(3)插入数据
格式: insert into 表名(字段名1,字段名2,字段名3 ...) values(值1,值2,值3...);
注意:字段名和值要一一对应(数量要对应、数据类型也要对应)
mysql> insert into t_student(no,name,sex,age,email) values(1,'张三','男',20,'[email protected]');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t_student;
+------+------+------+------+-----------------+
| no | name | sex | age | email |
+------+------+------+------+-----------------+
| 1 | 张三 | 男 | 20 | [email protected] |
+------+------+------+------+-----------------+
1 row in set (0.00 sec)
mysql> select * from t_student;
+------+------+------+------+-----------------+
| no | name | sex | age | email |
+------+------+------+------+-----------------+
| 1 | 张三 | 男 | 20 | [email protected] |
| 1 | NULL | NULL | NULL | NULL |
+------+------+------+------+-----------------+
2 rows in set (0.00 sec)
#查看表中的数据及其默认值(可以在创建表的时候进行指定)
mysql> desc t_student;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| no | int | YES | | NULL | |
| name | varchar(32) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| age | int | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
#初始化指定默认值
mysql> create table t_student(no int,name varchar(32) default 'm',sex char(1),age int(3),email varchar(255));
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> show tables;
+-----------------------+
| Tables_in_bjpowernode |
+-----------------------+
| bjpowernode |
| dept |
| emp |
| salgrade |
| t_student |
+-----------------------+
5 rows in set (0.00 sec)
mysql> desc t_student;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| no | int | YES | | NULL | |
| name | varchar(32) | YES | | m | |
| sex | char(1) | YES | | NULL | |
| age | int | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
注意:
① insert一旦执行成功,必然会多一条记录,如果为给其它字段指定值,默认值为null.
②在进行数据插入的过程中,字段名如果省略不写的话,默认就是全部,在values后要填写所有的值,不然就会报错。
mysql> insert into t_student values(2);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
插入日期:
数字格式化:format(数字,‘格式’)
mysql> select ename,format(sal,'$999,999') as sal from emp;
+--------+-------+
| ename | sal |
+--------+-------+
| SMITH | 800 |
| ALLEN | 1,600 |
| WARD | 1,250 |
| JONES | 2,975 |
| MARTIN | 1,250 |
| BLAKE | 2,850 |
| CLARK | 2,450 |
| SCOTT | 3,000 |
| KING | 5,000 |
| TURNER | 1,500 |
| ADAMS | 1,100 |
| JAMES | 950 |
| FORD | 3,000 |
| MILLER | 1,300 |
+--------+-------+
14 rows in set, 14 warnings (0.00 sec)
str_date:将字符串varchar类型转化成date类型
使用格式:str_date('字符串日期','日期格式')
功能
将字符串转化为varchar转化为日期date类型的数据,通常使用在插入insert
方面,插入所需要的是一个日期类型,需要通过该函数来进行转化。
mysql日期格式:
%Y:年 %m: 月 %d: 日 %h: 时 %i: 分 %s: 秒
使用演示:
mysql> insert into t_user(id,name,birth)values(1,'张飞',str_to_date('01-10-1990','%d-%m-%Y'));
Query OK, 1 row affected (0.01 sec)
mysql> select * from t_user;
+------+------+------------+
| id | name | birth |
+------+------+------------+
| 1 | 张飞 | 1990-10-01 |
+------+------+------------+
1 row in set (0.00 sec)
说明:如果在进行插入日期时候,填写的格式是<%Y-%m-%d>,则不需要使用str_to_date()函数进行转化,因为它会自动将该varchar字符串转化为date类型数据。mysql> insert into t_user(id,name,birth)values(2,'张三','1996-10-12');
mysql> insert into t_user(id,name,birth)values(2,'张三','1996-10-12');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t_user;
+------+------+------------+
| id | name | birth |
+------+------+------------+
| 1 | 张飞 | 1990-10-01 |
| 2 | 张三 | 1996-10-12 |
+------+------+------------+
2 rows in set (0.00 sec)
说明:默认展示格式“ %Y-%m-%d ”
date_format:将date类型转换为具有一定格式的varchar字符串类型
使用格式:date_format(日期类型数据,’日期格式 ‘);
应用场景:查询日期方面,设置展示的日期格式(日期转化为字符串)
需求:进行查询的时候将以某个特定统一格式展示
mysql> select id,name,date_format(birth,'%m/%d/%Y') as birt from t_user;
+------+------+------------+
| id | name | birt |
+------+------+------------+
| 1 | 张飞 | 10/01/1990 |
| 2 | 张三 | 10/12/1996 |
+------+------+------------+
2 rows in set (0.00 sec)
注意:
数据库中的命名规范:
所有的标识符全部都是小写,单词和单词之间使用下划线进行衔接。
date和datetime两个类型的区分?
date是短日期,只包括年月日等基本信息。
datetime是长日期,包括年月日时分秒信息。
mysql短日期默认格式为:%Y-%m-%d
mysql长日期默认格式为: %Y-%m-%d %h:%i:%s
在mysql中,如何获取系统的当前时间呢??------>now() #带有时分秒
(4)修改数据
update(DML)
语法格式:
update 表名 set 字段名1=值1 ,字段名2=值2,字段名3=值3...where 条件;
注意:没有条件限制会导致所有的数据全部更新
mysql> update t_user set name ='Jack',birth='1999-10-21' where id = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from t_user;
+------+------+------------+
| id | name | birth |
+------+------+------------+
| 1 | 张飞 | 1990-10-01 |
| 2 | Jack | 1999-10-21 |
+------+------+------------+
2 rows in set (0.00 sec)
(5)删除数据
delete(DML)
语法格式:delete from 表名 where 条件;
注意:如果没有条件,整张表的数据全部会被删除
mysql> delete from t_user;
Query OK, 2 rows affected (0.01 sec)
mysql> select * from t_user;
Empty set (0.00 sec)
mysql> insert into t_user(id,name,birth)values(2,'张三','1996-10-12');
Query OK, 1 row affected (0.01 sec)
mysql> insert into t_user(id,name,birth)values(1,'张三','1995-10-12');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t_user;
+------+------+------------+
| id | name | birth |
+------+------+------------+
| 2 | 张三 | 1996-10-12 |
| 1 | 张三 | 1995-10-12 |
+------+------+------------+
2 rows in set (0.00 sec)
mysql> delete from t_user where id=1;
Query OK, 1 row affected (0.00 sec)
mysql> select * from t_user;
+------+------+------------+
| id | name | birth |
+------+------+------------+
| 2 | 张三 | 1996-10-12 |
+------+------+------------+
1 row in set (0.00 sec)