五、数据操作初步
数据都是存储在数据表中。
数据的基本操作有4种:
增( 插入 inset )
删( 删除delete )
改( 修改update)
查( 查询select )
即所谓的CRUD操作:
Create ( 创建 )
Retieve ( 获取 )
Update ( 更新 )
Delete ( 删除 )
5.1、插入数据
语句形式:
insert into 表名(字段名1,字段名2, ... ) values (数据 1,数据2,... ) ;
说明:
① 字段名和数据是“一一对应”的,包括:数量一致,顺序一致,类型匹配。
② 对于要写入的数据,字符串和时间日期类型,要用单引号引起来。
③ 可以省略”字段列表”部分,此时就需要给出跟字段数量一样多的数据,类似这样:
insert into 表名values (数据1,数据2,.... ) ;
可以添加任意项:
补充:
导入其他数据库文件: source 文件路径(可以直接拖拽,写路径时,要精确到文件)
5.2、查询数据
语句形式:
select 字段名1, 字段名2, ..... from 表名[where 条件1 and 条件2];
说明:
① select 后的字段列表用于设定要从表中取出的哪些字段的值,(字段名字不用按照存储顺序写)。
② select 后可以只使用一个“ * ”号表示职出该表中所有字段的值。
③ where条件表示取出的数据所应满足的条件,比如:
● where id<10表示取出那些字段id的值小于10的行。
● where age > 60表示职出那些字段age的值大于60的行。
④ where条件可以不写,就取出所有行的数据。
5.3、删除数据
语句形式:
delete from 表名[where 条件1 and 条件2];
说明:
① 删除数据指的是删除表的某些行,比如原来有10行,可以将其中的3行删除,则剩下7行。
② where 条件表示删除数据所应满足的条件,含义跟select中的一样。
③ where 条件可以不写,如果不写,则会删除所有数据–通常都不会这么用。
5.4、修改数据
语句形式:
update 表名 set 字段名1 = 新值1,字段名2 = 新值 2,… [where 条件]; .
说明:
① 修改数据指的是修改表的某些行的某些字段。
② where 条件表示修改数据所应满足的条件,含义跟select中的一样。
③ where 条件可以不写,如果不写,则会修改所有数据 —— 通常都不会这么用。
六、数据类型
6.1、数据类型(列类型)总览
可见,mysql中的数据类型,总体分3大类:
数字型:
时间型:
字符型:
其中,在sql语句中,数字型数据不需要用****单引号引起来,而时间型和字符型数据需要用****单引号引起来。
6.2、整型
整型数据类型包括:
tinyint : 微整型
smallint :小整型
mediurmint :中整型
int :整型
bigint :大整型
不同大小范围的整型信息如下所示:
默认整数类型是带符号( - 号)的,即可以有正负值,比如: .
create table zhengxing1 (num1 int, num2 tinyint);
此时,num1 和num2中都可以存储负数(但都不能超出范围)
不带符号的整数类型设置形式如下:
create table zhengxing2(num1 int unsigned, num2 tinyint unsigned);
6.3、小数型
小数类型分为浮点小数和定点小数。
6.3.1、浮点小数
浮点小数是“不精确的小数”,包括float 和double。
float:
占用4字节存储空间,可称为“单精度浮点数”,约7位有效数字。
double :
占用8字节存储空间,可称为“双精度浮点数”,约17位有效数字。
6.3.2、定点小数
浮点小数是“精确的小数” —— 它通过内部技巧,突破了“有些小数无法用二进制精确表示”的局限。
其设定方式通常是这样的: decimal(M, D);
其中M表示该小数的总的有效位数(最大65) , D表示该小数的小数点后的位数。
6.4、日期时间型
日期时间类型包括如下几种:
date类型:
表示日期,格式类似这样: ‘000-00-00’
time类型:
表示时间,格式类似这样: ‘00:00:00’
datetime类型: .
表示日期时间,格式类似这样: ’ 0000-00-00 0:00:00’
timestamp类型:
表示“时间戳”,其实就是一个整数数字,该数字是从是“时间起点”到现在为止的“秒数”。
“时间起点”是: 1970-1-1 0:0:0
timestamp类型的字段,无需插入数据,而是会自动取得当前的日期时间(表示当前时刻)。
而且,此类型字段会在数据被更新时,也同样自动取得当前的日期时间(表示修改的时刻)。
特别总结:它在insert或update某行数据的时候,能够自动获得当前时间。
year类型:
表示年份,格式为: ‘0000’
注意:
时间类型的字面值,通常用单引号引起来。
New()函数的使用:
更新数据,以对比datatime类型的数据和timestamp类型的数据的区别:
timestamp类型在一个表中只能用一个字段!
6.5、字符串型
字符串类型常用的包括: char, varchar, text, enum, set分述如下:
6.5.1、定长字符char和变长字符varchar
● 定长字符类型 char
适用于存储的字符长度为固定长度的字符,比如中国邮政编码,中国身份证号码,手机号码等。
设定形式:
字段名称char(字符个数)
其特点是:
① 存储的字符长度固定,最长可设定为255个字符。
② 如果实际写入的字符不足设定长度,内部会自动用空格填充到设定的长度。
③ 相对varchar类型,其存职速度更快。
● 变长字符类型 varchar:
适用于存储字符长度经常不确定的字符,比如姓名,用户名,标题,内容,等大多数场合的字符。
设定形式:
字段名称varchar(字符个数)
其特点是:
① 存储的字符长度是写入的实际长度,但不超过设定的长度。最长可设定为65532 (字节)。
(1) 注: 由于其最长的限制是字节数,因此存储中文和英文的实际字符个数是不同的;
(2) 英文:一个字符占一个字节;
(3) 中文(gbk编码) : 一个字符占2个字节;
(4) 中文(utf8编码) : 一个字符占3个字节;
② 如果实际写入的字符不足设定的长度,就按实际的长度存储。
③ 相对于char字符串,其存取速度相对更慢。
补充:
一个表中有一个字段为c1,其类型为char(10),另有一个字段为c2,类型为varchar,问:
c2最多可以设置多长?
① 一个表中的行也有一个“最大字节长度的限制”,一行最多存储65532字节。
② 则此时,c2最多可以设置65532-10 = 65522 (长度设定)。
③ 如果c2中存储的全是英文字符,就可以存储65522个。
④ 如果存储中文:
gbk :最多65522/2 = 32761个
utf8 :最多65522/3 = 21840个
6.5.2、 text长文本类型
适用于存储“较长的文本内容”比如文章内容。最长可存储65535个字符。
如果还需要存储更长的文本,可以使用mediuntext (1600万左右)或longext (40亿左右)。
设定形式:
字段名称 text
text类型的字段不能设置默认值。
text类型虽然是字符类型,但是不能设置长度。
text类型数据,不存储在行中。
6.5.3、 enum和set类型
enum类型和set类型都是用于存储“有给定值的可选字符”,比如类似表单中的单选,多选,下拉列表。
● enum类型(单选类型枚举类型) :
enum类型通常用于存储表单中的**“单选项”**的值。
设定形式:
enum(‘选项值1’,’选项值2’,’选项值3’…)
这些选项值都对应了相应的“索引值”,类似索引数组的下标,但是从1开始的。
即这些选项的索引值分别为: 1,2,3, 4,…
enun类型最多可设定65535个选项。
示例:
create table tab1 (id, int, edu(‘大学’, ‘中学’,’小学’,‘其他’) );
insert into tab1 (id, edu) values(1, ’大学’)
或:
insert into tab1 (id, edu)values (1, 2); //表示中学
● set类型 (多选类型) :
set类型通常用于存储表单中的**“多选项”**的值。
设定形式:
set(‘选项值1’, ’选项值2’****, ‘选项值3’ ,…)
这些选项值都对应了相应的“索引值”,其索引值从1开始,并“依次翻倍”。
即这些选项的索引值分别为: 1,2,4, 8,16, … (其实就是2 的n次方)
enum 类型最多可设定64个选项值。
示例:
create table tab2 (aihao(‘篮球’, ’排球’, ’足球’, ‘中国足球’) ); #对应索引值为1,2,4,8
insert into tab2( aihao ) values (‘篮球’ );
或:
insert into tab2 ( aihao ) values(‘篮球,排球’);//(中间不能有空格!!!!!)
或:
insent into tab2 ( aihao ) values(‘篮球,足球,排球’);
或:
insert into tab2 ( aihao) values(2); //表示排球(2)
或:
insert into tab2 ( aihao) values (3), //表示“篮球,排球”(1+2)
或:
insert into tab2 ( aihao) values (7); //表示“篮球排球。足球”(1+2+4)
使用索引值插入结果: