数据库相关操作:
显示数据库:show databases;
如果是0.00秒并不代表没有花费时间,而是时间非常短,小于0.01秒。
创建数据库:
Query OK表示创建成功,1行受到影响,处理时间为0、05秒。
使用下面的命令查看某个数据库的详细信息:
必须要记住:默认使用的是拉丁字符集,如果不重新设置的话,中文显示会是乱码的,创建数据库的时候指定字符集编码,如下:
注意:latin1是拉丁字符集,这是默认的字符集,这个字符集所显示出来的汉字是?号的形式的。
图形化界面如何创建数据库:
删除数据库
删除数据库要慎重,因为删除数据库会删除数据库中所有的表和表中所有的数据。
删除数据库后我们可以用show databases;命令来显示看看没有被删除。
注意:数据库名中有中横线的,会当成特殊意义,需要使用``进行包含住。
选择数据库:
mysql> use abccs; 此时你已经进入你刚才所建立的数据库abccs.
显示你所选择数据库中所有的表:
查看当前使用的数据库:
如果没有选择数据库的话:
查看默认存储引擎:
mysql> show variables like '%storage_engine%';
结果显示,默认的存储引擎为InnoDB存储引擎。
查看mysql数据库系统支持的存储引擎的类型:
mysql> show engines;
也可以:
数据库表相关操作:
查看当前数据库中数据表:
说明刚才建立的数据库中还没有数据库表。
创建数据库表
注意:表名不能为sql语言的关键字,一个表中可以有一个或多个字段。定义时,字母大小写均可,各字段之间用逗号隔开,最后一个字段后不需要加逗号。
完整性约束条件
完整性约束条件是对字段进行限制。要求用户对该属性进行的操作符合特定的要求。如果不满足完整性约束条件,数据库系统将不执行用户的操作。其目的是为了保证数据库中数据的完整性。
MYSQL中基本的完整性约束条件如下表:
主键primary key:物理上存储的顺序
非空not null:此字段不允许填写空值
惟一unique:此字段的值不允许重复
默认default:当不填写此值时会使用默认值,如果填写时以填写为准
外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常
说明:虽然外键约束可以保证数据的有效性,但是在进行数据的crud(增加、修改、删除、查询)时,都会降低数据库的性能,所以不推荐使用,那么数据的有效性怎么保证呢?答:可以在逻辑层进行控制
auto_increment 标识该属性怕值自动增加,这是mysql的sql语句的特色。
数据类型
常用数据类型如下:
整数:int,bit
小数:decimal
字符串:varchar,char
日期时间: date, time, datetime
枚举类型(enum)
特别说明的类型如下:
decimal表示浮点数,如decimal(5,2)表示共存5位数,小数占2位
char表示固定长度的字符串,如char(3),如果填充'ab'时会补一个空格为'ab '
varchar表示可变长度的字符串,如varchar(3),填充'ab'时就会存储'ab'
字符串text表示存储大文本,当字符大于4000时推荐使用
对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径
使用数据类型的原则是:
够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间。
更全的数据类型可以参考:
http://blog.csdn.net/anxpp/article/details/51284106
下面这个可以先不用练习,后面会细讲。
显示表的结构
是指查看数据库中已存在的表的定义。查看表结构的语句包括describe 和 show create table语句。通过这两个语句,可以查看表的字段名、字段的数据类型和完整性约束条件等。
(1)查看表基本结构语句describe
mysql> describe xueshengdenjibiao;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| stu_id | int(11) | NO | PRI | NULL | |
| stu_name | varchar(20) | YES | | NULL | |
| stu_sex | tinyint(1) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.03 sec)
从查询的结果中我们看出xueshengdenjibiao中包含三个字段,同时显示了字段的数据类型(type),是否为空(null),是否为主外键(key),默认值(default),和额外信息(extra)。
Describe也可以缩写成desc.
mysql> desc xueshengdenjibiao;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| stu_id | int(11) | NO | PRI | NULL | |
| stu_name | varchar(20) | YES | | NULL | |
| stu_sex | tinyint(1) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
其结果是一致的。
(2)、查看表详细结构语句show create table
除了可以查看一些结构外,该语句还可以查看表默认的存储引擎和字符编码。
如果直接使用show create table xueshengdenjibiao;这种语句,结果的显示效果会比较差,尤其是遇到内容比较长的记录,显示的结果会很混乱。代码最后加上\G(要是大写)参数,可以更加美观的显示内容,对内容比较长的记录效果尤为明显。
修改表:
修改表名
表名可以在一个数据库中唯一的确定一张表。数据库系统通过表名来区分不同的表。
修改表名是通过SQL语句alter table实现的。
mysql> alter table shushengdenjibiao rename xueshengdenjibiao;
Query OK, 0 rows affected (0.11 sec)
也可以这样写:
mysql> alter table shushengdenjibiao rename to xueshengdenjibiao;
Query OK, 0 rows affected (0.00 sec)
其中to是可选参数,其是否在语句中出现不会影响语句的执行。
前面的表名是原先的表名,后面的表名是要修改后的表名。
也可以通过show table来显示表是否已经被修改。
修改字段名和字段的数据类型
字段的数据类型包括:整数型,浮点型,字符串型,二进制型,日期和时间类型等。
数据类型决定了数据的存储格式,约束条件和有效范围。表中的每个字段都有数据类型。
alter table语句也可以修改字段的数据类型。主键的字段数据类型不能修改。
上面的datetime是年月日时分钞,人家问你生日,你连时分秒都说出来了,不适合,所以,我们只需要存储年月日就可以了。
注意:如果表中有记录,修改数据类型时应该特别小心。因为,修改数据类型时可能会影响表中的数据。特别值得注意的是,字符类型的字段最好不要改成整数类型、浮点数类型。
注意:Modify和change都可以改变字段的数据类型。不同的是,change可以在改变字段数据类型的同时,改变字段名。如果要使用change修改字段数据类型,那么change后面必需跟两个同样的字段名。
添加字段
在表的末尾添加字段:
mysql> alter table xueshengdenjibiao add stu_age int(4) not null;
Query OK, 0 rows affected (0.59 sec)
Records: 0 Duplicates: 0 Warnings: 0
注意:增加字段时,如果能够加上完整性约束条件,一定要加上。这样可以保证此字段的安全性,甚至可以提高整个表的数据安全性。因此,添加时要仔细考虑这个问题。
在表的第一个位置增加字段:
默认情况下,新增字段为表的最后一个字段。如果加上first参数,则可以将新增字段设置为表的第一个字段。
mysql> alter table xueshengdenjibiao add stu_num int(5) first;
Query OK, 0 rows affected (0.27 sec)
Records: 0 Duplicates: 0 Warnings: 0
在表的指定位置之后增加字段:
mysql> alter table xueshengdenjibiao add stu_add varchar(20) after stu_phone;
Query OK, 0 rows affected (0.58 sec)
Records: 0 Duplicates: 0 Warnings: 0
一次性添加多个字段:
mysql> alter table q7 add (wuli int(3),huaxue int(3));
Query OK, 10 rows affected (0.32 sec)
Records: 10 Duplicates: 0 Warnings: 0
删除字段
mysql> alter table xueshengdenjibiao drop stu_age;
Query OK, 0 rows affected (0.31 sec)
Records: 0 Duplicates: 0 Warnings: 0
执行成功后,可以查看一下:
修改字段的排列位置
字段修改到第一个位置
mysql> alter table xueshengdenjibiao modify stu_id int(11) first;
Query OK, 0 rows affected (0.60 sec)
Records: 0 Duplicates: 0 Warnings: 0
字段修改到指定位置
更改表的存储引擎
Mysql存储引擎是指mysql数据库中表的存储类型。不同的表的类型有着不同的优缺点。在创建表时,存储引擎就已经设定好了。如果要改变,可以通过重新创建一张表来实现。这样做是可以达到目的,但必然会影响到表中的数据。而且,操作比较麻烦。在mysql中,也可以通过alter table更改表的存储引擎的类型。
在修改之前我们可以先查看一下,表的结构:
mysql> show create table xueshengdenjibiao \G
*************************** 1. row ***************************
Table: xueshengdenjibiao
Create Table: CREATE TABLE `xueshengdenjibiao` (
`stu_id` int(11) NOT NULL DEFAULT '0',
`stu_name` varchar(20) DEFAULT NULL,
`stu_xingbie` varchar(1) DEFAULT NULL,
`stu_phone` varchar(20) DEFAULT NULL,
`stu_num` int(5) DEFAULT NULL,
PRIMARY KEY (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
我们来修改一下,看看:
mysql> alter table xueshengdenjibiao engine=myisam;
Query OK, 0 rows affected (0.66 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改后我们在来看看:
mysql> show create table xueshengdenjibiao \G
*************************** 1. row ***************************
Table: xueshengdenjibiao
Create Table: CREATE TABLE `xueshengdenjibiao` (
`stu_id` int(11) NOT NULL DEFAULT '0',
`stu_name` varchar(20) DEFAULT NULL,
`stu_xingbie` varchar(1) DEFAULT NULL,
`stu_phone` varchar(20) DEFAULT NULL,
`stu_num` int(5) DEFAULT NULL,
PRIMARY KEY (`stu_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
如果表中已经l有很多的数据,改变存储引擎可能会造成一此意料之外的影响。如果一个表中已经存在了很多数据,最好不要轻易更改其存储引擎。
删除表的外键约束
外键是一个特殊字段,其将某一表与其父表建立关联关系。在创建表的时候,外键约束就已经设定好了。由于特殊需要,与父表之间的关联关系需要去除,要求删除外键约束。
mysql> alter table q3 drop foreign key c_de;
Query OK, 0 rows affected (0.27 sec)
Records: 0 Duplicates: 0 Warnings: 0
原来的外键变成了普通键key,操作成功。
删除自增长的主键
先删除自增长在删除主键
Alter table 表名 change id id int(10); //删除自增长
Alter table 表名 drop primary key; //删除主建
删除表
删除表时,会删除表中的所有数据。因此,在删除表时要特别注意。最稳妥的做法是先将表中所有的数据备份出来,然后在删除表。一旦删除表后发现造成了损失,可以通过备份的数据还原表,以便将损失降低到最小。如果在创建表时可能存在外键约束,一些表成为了与之关联的表的父表。要删除这些父表,情况比较复杂。
删除没有被关联的普通表
mysql> drop table shushengdenjibiao2;
Query OK, 0 rows affected (0.08 sec)
删除被其他表关联的父表
在前面我们讲解了创建表时设置表的外键。这样就使数据库中的某些表之间建立了关联关系。一些表成为了父表,这些表被其子表关联着。要删除这些父表,情况不像上一节那么简单。
最简单直接的办法是先删除子表,然后再删除父表。但这样可能会影响子表的其他数据;另一种办法是,先删除子表的外键约束,然后再删除父表。这种方法,不会影响子表的其他数据,可以保证数据库的安全。因此我们来重点说一下这种方法。
mysql> show create table example \G
*************************** 1. row ***************************
Table: example
Create Table: CREATE TABLE `example` (
`stu_id` varchar(20) DEFAULT NULL,
`stu_shuxue` int(20) DEFAULT NULL,
`stu_yuwen` int(20) DEFAULT NULL,
KEY `c_ff` (`stu_id`),
CONSTRAINT `c_ff` FOREIGN KEY (`stu_id`) REFERENCES `example1` (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
执行删除代码:
mysql> alter table example drop foreign key c_ff;
Query OK, 0 rows affected (0.72 sec)
Records: 0 Duplicates: 0 Warnings: 0
再来查看一下:
mysql> show create table example \G
*************************** 1. row ***************************
Table: example
Create Table: CREATE TABLE `example` (
`stu_id` varchar(20) DEFAULT NULL,
`stu_shuxue` int(20) DEFAULT NULL,
`stu_yuwen` int(20) DEFAULT NULL,
KEY `c_ff` (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
表已经不存在外键了(foreign key),原来的外键变成了普通键(key)。