数据库技术: SQL,关系数据库标准
注意: 环境编码: cmd客户端是固定的gbk编码 而php网页中,是该网页文件的编码(现在主流都是utf8)。 mysql> set names gbk;
命令行启动停止数据库:net start/stop mysql
登录方式:mysql -hlocalhost -uroot -p -P端口号 -h服务器地址 -u登录名 退出:quit或exit
显示数据库: show databases;
创建数据库:create database db1 charset utf8;
数据库的备份:mysqldump -h服务器名 -u登录名 -p数据库名 > 文件名 数据库的恢复:mysql -h服务器名 -u登录名 -p数据库名 < 文件名 // 没有登录数据库系统 备份:mysqldump -hlocalhost -uroot -p nunu > c:/nunu.sql
基础语法规定 注释: 1、#注释内容 2、-- 注释内容(--后有空格) 3、/*注释内容*/ 语句行 : 默认情况下,以一个英文分号作为一条语句的结束1 mysql 可以人为设定语句结束符 delimiter 新的结束符
大小写: mysql 本身不区分大小写 根据系统是否区分大小写
创建数据库: create database 数据库名 【charset 字符编码名称】 【collate 排序规则】
删除数据库:drop database 【if exists】数据库名; 其中:if exists是用于一种安全运行的考虑,如果数据库不存在不会报错。
修改数据库: alter database 数据库名 charset 新的编码 collate 新的排序名;
显示字符编码:show charset; 显示排序规则:show collation; 显示一个数据库的创建语句:show create database 数据库名;
进入数据库:use 数据库名;
PHP使用MySQL函数: //sql_php
$link=mysql_connect("数据库服务器地址","用户名","密码"); //连接数据库 mysql_query("set names 网页编码名"); //设定“连接编码”; //也可以这样做,mysql_set_charset("网页文件编码名");
mysql_query("use 数据库名"); //选定要使用的数据库 // = mysql_select_db("数据库名");
$result = mysql_query("select / delect /updata /insert / desc /show tables /drop....");
desc 显示表的结构
select * from tab_xiaoshu;
数据的打印: $result = mysql_query("select * from tab_int2;"); while ($res = mysql_fetch_array($result)) { }
$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);
create table tab_temp1(id int,name varchar(10),age tinyint); insert into tab_temp1 values(1,'user1',18);
扩展php中操作mysql数据的几个函数: $n1 = mysql_num_rows($result); //获得该结果集的数据行数 $n2 = mysql_num_fields($result); //获得该结果集的数据列数 $name = mysql_field_name($result,$i); //获得该结果集的第i个字段的名字 i从0开始算起
字段类型
字符类型:
主要有 varchar类型 理论值。65535; char 定长字符串: 比如:手机号,中国邮政编码 不够会补齐。
create table tab_char_varchar( postcode char(6), /*邮政编码*/ name varchar(10) /*姓名*/ );
enum类型 单选项字符串数据类型。他非常适合于存储表单界面中的“单选项值” enum("选项1","选项2",...); 实际内部:这些选项值对应的是如下数字值 set类型 单选项字符串数据类型。他非常适合于存储表单界面中的“多选项值” set("选项1","选项2",...); 对应的数字是1,2,4,8,16
#演示enum,set的使用: create table enum_set( id int auto_increment primary key, sex enum('男','女'), fav set('篮球','足球','中国足球','台球') );
#插如数据演示 insert into enum_set(id,sex,fav) values(null,'男','篮球'); insert into enum_set(id,sex,fav) values(null,1,1);
#多选项 insert into enum_set(id,sex,fav) values(null,'男','篮球,足球,台球'); insert into enum_set(id,sex,fav) values(null,'女',11);
text类型: 他成为“长文本”字符类型。通常,其中存储的数据不占表格中的数据限制。 其最长存储是65535字符。smalltext longtext
其他 binary 类型 定长二进制字符串 varbinary 类型 变长二进制字符串 blob 类型 二进制数据类型,但是用于存储“图片”
时间类型: datetime类型: 时间日期
date类型: 日期
time类型: 时间
year类型: 年份 timestamp: 时间戳类型:类似js中的GetTime(),或php中的Time(),他们都得到的是一个“整数数字”。 在应用中,时间日期类型,在我们自己给定的数据情况下,需要使用“单引号”引起来。
################################################### #示例代码 create table tab_time( dt datetime, d2 date, t2 time, y year, ts timestamp );
##插入数据 insert into tab_time(dt,d2,t2,y) values('2016/4/1 15:50:00','2016/4/1','15:50:00','2017');
insert into tab_time(dt,d2,t2,y) values(now(),now(),now(),now());
基本语法形式: create table 【if not exists】 表明(字段名【,索引或约束列表】) 【表选项列表】; create table 【if not exists】 表明(字段1,字段2,....字段名【,索引1,索引2,...】) 【表选项1,表选项2,...】;
字段设定形式: 字段名 类型 【字段属性1 字段属性2 ....】
primary key:用于设定该字段为主键,此时该字段的值就可以“唯一确定”一行数据; unique key:设定该字段是“唯一的”,也就是不可重复的 not null: 用于设定该字段不能为空(null) 如果没有设定,则默认是可以为空的 default xx值:用于设定该字段的默认值。
#演示字段属性的使用 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 '电子邮箱' );
#插入数据 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;
索引: 指定一个表的某个或某些字段作为“索引数据字段” 形式为: 索引类型(要建立索引的字段名) 索引类型有: key(字段名); #普通索引 含义:就是一个索引,只能加快查找速度 unique key(字段名); #唯一索引 含义:可以设定其字段的值不能重复(唯一性) primary key(字段名); #主键索引 含义:具有区分该表中的任何一行数据的作用 唯一性可以为空 而主键索引不能为空 fulltext (字段名); #全文索引 foreign key (字段名) references其他表中的字段名; #外键索引
#演示索引创建语法: create table tab_suoyin( id int auto_increment, user_name varchar(20) , email varchar(50), //age int, /*没有索引*/
key(email), unique key(user_name),/*这就是唯一索引*/ primary key(id)/*这就是主键索引*/ );
外键: create table banji( id int auto_increment primary key, banjihao varchar(10) unique key comment '班级号', banzhuren varchar(10) comment '班主任', open_date date comment '开班日期' );
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) );
约束:
主键约束:primary key(字段名);
唯一约束:unique key(字段名);
外键约束:foreign key(字段名) references 其他表名;
检查约束: create table tab1( age tinyint, check (age>=0 and age<100) /*这就是检查约束*/ );
表选项列表
charset = 要使用的字符编码 engine = 存储引擎(表类型) auto_increment = 设定当前的自增长字段的初始值 comment = 该表的一些说明文字
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);
修改表: 添加字段: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] 新表名;
#实例 alter table tab_xuanxiang add column email varchar(50); alter table tab_xuanxiang add key (age); /*添加一个普通索引*/
删除表: drop table [if exists] 表名;
从已有表复制表结构:create table 【if not exists】新表名 like 原表名;
desc tab_int;
创建视图: create view v1 as select id,age from tab_xuanxiang;
使用视图:当做一个表用就可以了
删除视图: drop view 【if exists】 视图名;