mysql中列属性,基础知识

数据库技术:
SQL,关系数据库标准

mysql列属性包括:NULL 、default、comment、primary key、unique key

注意: 环境编码:
 cmd客户端是永恒的gbk编码
 而php网页中,是拖欠网页文件的编码(现在主流都是utf8)。 mysql> set
names gbk;

一、NULL
概念模式:NULL(默认)  NOT NULL

令执行启动停数据库:net
start/stop mysql

空属性有2独价值,mysql数据库默认字段都是为null的,但是在事实上支付进程遭到,尽可能保证有的数码都不应也null,空数据尚未意思,任何参预NULL运算的结果尚且是NULL。

签到格局:mysql
-hlocalhost -uroot -p -P端口号  -h服务器地址  -u登录名
退出:quit或exit

二、comment
排描述(comment),又足以称注释,实际没有什么意义,是特别为此来讲述字段的,会冲创立语句保存,用来让程序员(或者数据库管理员)来举行询问之。重要用来查看创制表的语法上开展查看,可用show
create table tb_name;语词查看

亮数据库: show
databases;

  create table my_tab(

开创数据库:create
database db1 charset utf8;

    str varchar(10) not null comment ‘描述音信’,

数据库的备份:mysqldump
-h服务器名 -u登录名 -p数据库名 > 文件名 数据库的死灰复燃:mysql
-h服务器名 -u登录名 -p数据库名 < 文件名      // 没有登录数据库系统
备份:mysqldump -hlocalhost -uroot -p nunu > c:/nunu.sql

    num int unsigned not null comment ‘描述信息’

基础语法规定
 注释: 1、#注内容   2、– 注释内容(–后有空格)   3、/*申明内容*/
 语句行 :   默认情状下,以一个英文分号作为一如既往漫漫告句的了1   mysql
可以人也设定语句停止符   delimiter 新的截至符

  );

高低写:  mysql 
本身不区分轻重缓急写  依照网是否别轻重缓急写

三、default
于是来安装默认值。某一样栽数据会平常的起有具体值,可以当平起首指定好,在得实际数据的上,用户可以选取性地使用默认值。

 

  create table my_tab(

创立数据库: create
database 数据库名 【charset  字符编码名称】 【collate 排序规则】

    str varchar(10) not null,

剔除数据库:drop
database 【if exists】数据库名; 其中:if
exists是用于平种植安全运行的设想,假如数据库不在无碰面报错。

    num int unsigned default 10;   #默认值为10

改数据库: alter
database 数据库名  charset  新的编码  collate  新的排序名;

  );

彰显字符编码:show
charset; 显示排序规则:show collation; 彰显一个数据库的创办语句:show
create database 数据库名;

拔取办法:

进数据库:use
数据库名;

  insert into my_tab (str) values (‘abc’);   #num会自动设为10
  insert into my_tab values (‘abc’, default); #用默认值插入num字段

PHP使用MySQL函数:
//sql_php

 

$link=mysql_connect(“数据库服务器地址”,”用户名”,”密码”); //连接数据库
mysql_query(“set names 网页编码名”);    //设定“连接编码”;
   //也可以这样做,mysql_set_charset(“网页文件编码名”);

四、primary key (主键)

mysql_query(“use
数据库名”);     //选定要运的数据库    // =
mysql_select_db(“数据库名”);

主键约束: 主键对应的字段中之多少未容许再度,一旦再,操作失败。

$result =
mysql_query(“select / delect /updata /insert / desc /show tables
/drop….”);

  1. 主键特点

desc 
展现表的结构

  ① 唯一性,一张表只好发出一个字段设为主键

select * from
tab_xiaoshu;

  ② 主键不允许吗NULL

多少的打印: $result =
mysql_query(“select * from tab_int2;”); while ($res =
mysql_fetch_array($result)) { }

  1. 追加主键模式,常用之出3栽

$result =
mysql_query(“select * from tab_int2;”); fatch函数的老两种植形式mysql_fetch_assoc($result);
 array(‘id’=>1,’name’=>’user1’,’age’=>18);
mysql_fetch_row($result);
 array(‘1’=>1,’2’=>’user1’,’3’=>18);
mysql_fetch_array($result);
 array(‘id’=>1,’name’=>’user1′,’age’=>18,’id’=>1,’name’=>’user1’,’age’=>18);

  ① 在开立表时,在字段后面和关键字primary key设置

create table
tab_temp1(id int,name varchar(10),age tinyint); insert into tab_temp1
values(1,’user1′,18);

    create table my_tab(

扩展php中操作mysql数据的几乎独函数:
$n1 = mysql_num_rows($result); //拿到该结果集的数行数 $n2 =
mysql_num_fields($result); //得到该结果集的数额列数 $name =
mysql_field_name($result,$i); //拿到该结果集的第i个字段的讳
i从0初步算从

      id int primary key, #率先种办法

字段类型

      name varchar(10)

字符类型:

    )charset utf8;

要害出  varchar类型
 理论值。65535;  char   定长字符串:   比如:手机号,中国邮政编码  不充足会补充一起。

  ② 在开创表时,在富有字段后使用primary key(字段列表)设置复合主键

create table
tab_char_varchar(  postcode char(6), /*邮编*/  name
varchar(10) /*姓名*/ );

    create table my_tab2(

 enum类型
  单选项字符串数据类型。他非常适合于储存表单界面中之“单选项值”
  enum(“选项1″,”选项2”,…);   实际中:这个选拔项值对应之凡之类数字值
 set类型   单选项字符串数据类型。他十分适合于储存表单界面中之“多采取项值”
  set(“选项1″,”选项2”,…);   对应之数字是1,2,4,8,16

      id int,

#演示enum,set的使用:
create table enum_set(  id int auto_increment primary key,  sex
enum(‘男’,’女’),  fav set(‘篮球’,’足球’,’中国足球’,’台球’) );

      number int,

#插入而数据演示 insert
into enum_set(id,sex,fav) values(null,’男’,’篮球’); insert into
enum_set(id,sex,fav) values(null,1,1);

      name varchar(10),

#多选项 insert into
enum_set(id,sex,fav) values(null,’男’,’篮球,足球,台球’); insert into
enum_set(id,sex,fav) values(null,’女’,11);

      primary key(id, number, …)
#仲栽方法,这种格局是相符主键,相比独特

 text类型:  
  他成为“长文本”字符类型。通常,其中蕴藏的多少未占用表格中的多寡限制。
  其极其充足存储是65535字符。smalltext  longtext

    )charset utf8;

此外  binary
类型 定长二迈入制字符串  varbinary 类型 变长二前行制字符串  blob
类型 二进制数据类型,不过用于存储“图片”

复合主键:

 

     在创制表的时候,在有的字段之后,使用primay
key(主键字段列表)来创建主键(可以生多独字段作为主键)来创建复合主键。

岁月档次:
 datetime类型:   时间日期

     语法:primary key(字段1,字段2……)

 date类型:
  日期

     例子:创造同摆my_primark_key2的申,为夫添加number字段(int类型)和classname
字段(varchar类型),将之2字段添加成复合主键。          

 time类型:
  时间

        create table if not exists my_primary_key2(

 year类型:   年份  
 timestamp:
  时间戳类型:类似js中之Get提姆(Tim)e(),或php中的提姆e(),他们还获的是一个“整数数字”。
在使用被,时间日期类型,在大家好加的数码意况下,需要动用“单引号”引起来。

          number int not null,

 

          classname varchar(20) not null,

###################################################
#以身作则代码 create table tab_time(  dt datetime,  d2 date,  t2 time,  y
year,  ts timestamp );

          primary key(number,classname) #顺应主键

##安插数据 insert
into tab_time(dt,d2,t2,y)  values(‘2016/4/1
15:50:00′,’2016/4/1′,’15:50:00′,’2017’);

        )charset utf8;

insert into
tab_time(dt,d2,t2,y)  values(now(),now(),now(),now());

插入数据:插入数据只有区区个字段(number,name)共同重新时才会面插入失利,如若来1只字段重复,另一个字段不另行,那么会插入成功。

 

 

主导语法形式: create
table 【if not exists】 阐明(字段名【,索引或约束列表】)
【表选项列表】; create table 【if not exists】
注解(字段1,字段2,….字段名【,索引1,索引2,…】)
【表选项1,表选项2,…】;

③ 在已经成立好的表中追加主键

字段设定形式: 字段名
类型 【字段属性1 字段属性2 ….】

   alter table my_tab3 modify id int primary key; #老三栽方法

primary
key:用于设定该字段为主键,此时欠字段的价就可“唯一确定”一行数;
unique key:设定该字段是“唯一的”,也就是不可再的 not null:
用于设定该字段不可知啊空(null) 倘使无设定,则默认是可为空的 default
xx值:用于设定该字段的默认值。

   alter table my_tab3 add primary key(id, …);

#演示字段属性的动
create table tab_shuxing(  id int auto_increment primary key,
 user_name varchar(20) not null unique key,  password varchar(48) not
null,  age tinyint default 18,  email varchar(50) comment ‘电子邮箱’
);

  1. 主键更新与删除

#插入数据 insert into
tab_shuxing (id ,user_name,password,age,email)values
(1,’nunu1′,’123456′,20,’nunu1@qq.com’); insert into tab_shuxing (id
,user_name,password,age,email)values
(null,’nunu2′,md5(‘123456′),null,’nunu2@qq.com’); insert into
tab_shuxing (user_name,password,email)values
(‘nunu3’,md5(‘654321′),’nunu3@qq.com’);

  主键无法改进,若想翻新主键,只好去后更长!!!!

select * from
tab_shuxing;

  alter table my_tab3 drop primary key;

 

 

目录:
 指定一个表明的某某或少数字段作为“索引数据字段”
 格局为: 索引类型(要树目录的字段名)
 索引类型有: key(字段名);  #普通索引
   含义:就是一个索引,只好加速查找速度    unique
key(字段名); #唯索引    含义:可以设定其字段的价值无法重新(唯一性)
   primary key(字段名); #主键索引
   含义:具有区分该表中的别一行数的企图     唯一性可以为空
而主键索引无法吧空    fulltext (字段名); #全文索引    foreign key
(字段名) references其他表中的字段名; #外键索引

五、auto_increment — 自动增长

 

  1. 电动增长一般与主键搭配以,
    字段设置自动增长后,不受值,或给默认值或NULL的时光,会自行触发,假若被了价值,则当前自增失效,从生一样浅始发以时最为可怜价值起首自增。

#以身作则索引创制语法:
create table tab_suoyin(  id int auto_increment,  user_name
varchar(20) ,  email varchar(50),  //age int, /*并未索引*/

装也于增长之字段必须是一个索引,且如若一个整型类型,一张表只好有一个字段被设为auto_increment
!!!!

 key(email),  unique
key(user_name),/*随即虽是绝无仅有索引*/  primary
key(id)/*当即就是是主键索引*/ );

由增长的特点 :

 

      
a)、任何一个字段做打增长前提:该字段必须是一个索引字段(key一栏有价)。

外键: create table
banji(  id int auto_increment primary key,  banjihao varchar(10) unique
key comment ‘班级号’,  banzhuren varchar(10) comment ‘班主任’,
 open_date date comment ‘开班日期’ );

      b)、自增长字段日常是整形。

create table xuesheng(
 stu_id int auto_increment primary key,  name varchar(10),  age
tinyint,  banji_id int comment ‘班级id’,  foreign key (banji_id)
references banji(id) );

      c)、一个表中只可以发出1单从增长字段。

 

示例:
补加相同摆my_auto_increment的阐发,为夫添加id字段和name字段,其中id字段设置成主键和从增长。

 

  create table if not exists my_auto_increment(

 

   id int primary key auto_increment, #匹配主键使用,自增长

约束:

   name varchar(10) not null

主键约束:primary
key(字段名);

 )charset utf8;

唯约束:unique 
key(字段名);

插入值:       

外键约束:foreign 
key(字段名) references 其他表名;

  insert into my_auto_increment values(null,’张三’);
#行之有效,给与空值null的款型,这种样式太有利
  
insert into my_auto_increment(name) values(‘李四’);
#使得,不叫值的花样,假设无让值,表名后要指定哪些字段要为值

检查约:  create
table tab1(   age tinyint,   check (age>=0 and
age<100) /*当下虽是反省约*/  );

若果对应的由增长字段输入了价值,那么从增长失效,不过生一样不成或能对的起增长(从太深值+1)。

 

 insert into my_auto_increment values(10,’王五’);

表选项列表

重新插入数据的早晚,自增长就谋面打11从头:

charset =
要采用的字符编码 engine = 存储引擎(表类型) auto_increment =
设定当前底由增长字段的开始值 comment = 该表的片证实文字

 insert into my_auto_increment values(null,’赵六’);

 

从今增长假使关系到字段改变,必须优先去自增长,后加,一摆放表中只好发出1只从增长。

create table
tab_xuanxiang(  id int auto_increment primary key,  name varchar(10),
 age tinyint ) charset = gbk, engine = MyIsam, auto_increment = 1000,
comment = ‘说明、、’ ;

改时都存在由增长的价值,修改才会相比当下一度有些打增长的然则深价值大,不能聊(小则无见效)。

insert into
tab_xuanxiang(id,name,age) values(null,’nnn’,18);

 update my_auto_increment set id = 20 where name = ‘赵六’;
#拿姓名为赵六的id修改成20,仅仅是革新数据,由此下一致赖打增长值是12

 

双重插入数据,自增长就会于12起头,而不是自21,注意insert和update操作后效果的不等:

修改表:
添加字段:alter table 表名 add [column] 新字段名 字段类型
[配段属性列表] 修改字段(并然则改名):alter table 表名 change
[column] 旧字段名 新字段名 新字段类型 [新字段属性列表]
删除字段:alter table 表名 drop [column] 字段名 添加普通索引:alter
table 表名 add key [索引名] (字段名1,….)
添加唯一索引(约束):alter table 表名 add unique key [索引名]
(字段名1,….) 添加主键索引(约束):alter table 表名 add primary key
[索引名] (字段名1,….) 修改表名:alter table 表名 rename [to]
新表名;

insert into my_auto_increment values(null,’甜七’);

#实例 alter table
tab_xuanxiang add column email varchar(50); alter table tab_xuanxiang
add key (age); /*增长一个平常索引*/

alter table my_tab4 auto_increment = 20;
#但是修改单张表的前奏值,下一致次于栽数据由增长从20开

删除表: drop table
[if exists] 表名;

剔除自增增长:

打已经发出表复制表结构:create
table 【if not exists】新表名 like 原表名;

于增长是字段的一个性能,可以透过modify属性来改(字段没有于增长)。

desc tab_int;

语法:alter table 表名字 modify 字段名 数据类型

开创视图: create view
v1 as select id,age from tab_xuanxiang;

例子:将my_auto_Increment表中 id字段的打增长去丢。

动用视图:当做一个表用就足以了

    alter table my_auto_increment modify id int;

剔除视图: drop view
【if exists】 视图名;

从增长为何从1方始?又怎历次都是自增1呢?

 所有系统的显现(如字符集、校对集)都是出于系统的里边变量举行控制的。

 查看自增长对应之变量的语法:show variables like ‘auto_increment%’;

mysql> show variables like ‘%auto_increment%’;
+————————–+——-+
| Variable_name | Value |
+————————–+——-+
| auto_increment_increment | 1 | #步长
| auto_increment_offset | 1 | #起始值
+————————–+——-+

得修改变量实现不同之法力。假如对周数据库修改(而未是一模一样张表),这种艺术是改时会话级(当前客户端,当那些连续有效,关闭失效)。

 修改成五回等自增为5。

 set auto_increment_increment = 5; #表示一致次于由增5

 

  1. 接纳形式,在字段后边跟auto_increment关键字

  create table my_tab4(

   id int auto_increment, #起增长,这里没有配个主键使用

   name varchar(10)

  )charset utf8;

. 修改由增长

  alter table my_tab4 auto_increment = 值;
#若果转的价相比较当下最为要命价值多少,则改无效

. 查看系统自增长变量

  show variables like ‘%auto_increment%’;

  可以改系统变量的价值, 可是没什么意思

  set auto_increment_increment = 值; #修改由添幅度

  1. 去除自增长

  alter table my_tab1 modify id int;
#改字段,使该尚未auto_increment即可。

 

六、unique key 唯一键

一如既往张表往往时有发生成千上万字段需要拥有唯一性,数据不能重(但足以吗null,不像主键),这些时刻用唯一键(unique)就反映出这优势了,可以化解表中多单字段需要唯一性约束之问题。

唯一键的本质和主键的特性差不多,唯一键默认的同意字段为空,而且好多独字段为空(空字段不与唯一性相比较)!!!!

特点:
1.
唯一键许自动为NULL,且可发多单。假若手上表达中没有主键,并起唯一键设为NOT
NULL时,会来得第一独NOT NULL的唯一键为PRI,但他本质是唯一键!!!
据此用desc 表名
查看有字段呈现也pri的字段不必然是主键,如果该字段是一个非为空的唯一键,也相会突显为Pri,可经过show
create table 查看真伪

  1. 多唯一键:有3栽办法

   语法: 字段名 数据类型 unique/unique key

  ① 在开创时在字段后边和关键字unique/unique key

    create table my_unique1(

      id int unique, #唯一键

      num int unique key, #唯一键

      name varchar(10)

    )charset utf8;

  ② 在创建时以所有字段前边加 unique key(字段列表) ,复合唯一键MUL

    create table my_unique2(

      id int,

      num int,

      name varchar(10)

      unique key(id, num)
#唯一键,类似于主键,这种样式为称复合唯一键

    )charset utf8;

  ③ 在注明创设之后多唯一键

    alter table my_unique3 add unique key(字段列表);  #unique key
或 unique 都可以

    alter table my_unique3 modify 字段名 数据类型 unique;
#修改就存在的字段为唯一键

  1. 更新和删除唯一键

   
和主键一样,先去后上加,因为唯一键可以生出差不多独,所以未删直接抬高也得!!!!!

    alter table my_unique drop index 索引名;
#唯一键默认使用字段名作为目录名字

 

打上述能唯一键和主键都是索引!!!

七、索引

  索引的效能: 提高查询效率、约束数据的行之有效

  1. 主键索引   primary key

  2. 唯一键索引  unique key

  3. 全文索引   textfull index

  4. 普通索引   index

 

相关文章