数据库的学习要求:1.为项目设计表;2.使用SQL(Structure Query Language)语句(SQL编程)。其他的都可以使用工具完成。
SQL:
DDL:创建库、创建表
DML:对数据的操作,插入、删除、修改
DQL:数据查询语句
DCL:数据控制语句
1.连接数据库
现在环境变量配置,在cmd下连接服务器:mysql -h localhost -u root -p密码,mysql -h 连接地址 -u 服务器用户名 -p密码,连接地址可以是localhost(本机)、ip、域名(www....)。密码在这里最好不要输入,以免被盗,可以在输入密码之前先回车,在输入非明文的密码。
查看当前状态:s;
查看配置变量:show variables;
查看配置变量里面的具体的某个值:show variables like ‘time’;也可以方向键翻;
2.创建数据库
查看本机的库:show databases;
创建库:create database (if not exist)库名字;括号里面可写可不写
删除库:drop database (if exist) 库名字;括号里面可写可不写
创建表:create table 库名字.user(id int,name char(30),age int ,sex char(3));
3.选择一个库作为默认的数据库
选择一个库作为默认的数据库:use 库名字;
这样进行表操作的时候就不需要前面那样库名字.user,而是可以之间写表名。
查看当前库里所有的表:show tables;
查看表结构:desc 表名;
删除表:drop (if exist) 表名;
创建表:create if not exist tablename;
4.增删改查
插入
插入:insert into tablename values(1,'zhangsan',10,'nan');
插入:insert into tablename values('2','lisi','13','nv');为避免出错可以都加引号,可以自动匹配;
可以部分插入,前面加字段,这样可以不考虑顺序:insert into tablename(id, name) values('1', 'zhangsan');
查看
select * from tablename;
修改
改一个值:update tablename set name='lili' where id='2';
改多个值:update tablename set name='lili' ,age= '21',sex='nan' where id='2' sex;
删除
删除:delete from tablename where id=2;
5.帮助的使用
按层次查找:
帮助可以提供的内容:?contents;
根据上述结果例如可以查询数据类型:?data types;
根据上述结果例如可以查询int:?int;
按关键字查找:
例如想要查找怎样使用show:?show;
例如想要查找怎样使用create:?create;
根据网易云课堂学习整理:http://study.163.com/course/courseMain.htm?courseId=247003
创建数据表
1.什么是数据表
行(记录)和列(字段)组成。
2.创建数据表的SQL语句模型
DDL
CREATE TABLE [IF NOT EXISTS]表名称(
字段名1 列类型 [属性] [索引],
字段名2 列类型 [属性] [索引],
...
字段名n 列类型 [属性] [索引]
)[表类型] [表字符集];
命名规范:
1)虽然SQL是不分大小写的,但是有些系统会区分(Linux),所以表名称和字段名等自定义的名称一般小写。
2)SQL语句都大写。
3.数据值和列类型
1)数值型
整型
1B TINYINT
2B SMALLINT
3B MEDIUMINT
4B INT
8B BIGINT
浮点型
FLOAT(M,D) 4B
DOUBLE(M,D) 8B
定点数
DECIMAL(M,D) M+2
M代表一共几位,D代表几位小数。浮点数不精确,他是一个近似值,不适用于对精度要求高的情况,这些情况可以用定点数。定点数就是小数位数固定的小数,例如保留两位的价格,小数点永远在倒数第二位。具体区别参考 http://www.cnblogs.com/cloudseawang/archive/2007/02/06/641652.html 讲的很详细。
2)字符型
"mysql"[双引号] 'mysql'[单引号] [转义字符]
char(m) 最多255字节 固定长度
varchar(m) 最多255字节 可变长度
m代表位数。
varchar后面有一个空位‘0’。char和varchar有以下区别:
char(4) |
字节 |
varchar(4) | 字节 |
'' | 4 | '' | 1 |
‘ab’ | 4 | 'ab' | 3 |
'abcd' | 4 | 'abcd' | 5 |
'abcdefgh' | 4 | 'abcdefgh' | 5 |
text 文本数据 (文章) 2^16字节长度
MEDIUMTEXT
LONGTEXT
blob 二进制数据 (相片)
MEDIUMTEXT
LONGBLOB
ENUM 枚举 1或2字节
ENUM("one","two","three","four") --- 最多有65535个数,一次只能有一个值,例如单选
SET 集合 1,2,3,4,8字节 ---一次可以用多个集合中的值,中间使用“,”分开,例如多项选择
3)日期型
DATE | YYYY-MM-DD |
TIME | hh:mm:ss |
DATETIME | YYYY-MM-DD hh:mm:ss |
TIMESTAMP 时间邮戳 | YYYYMMDDhhmmss |
YEAR | YYYY |
而一般数据结构中有关于时间的数据结构,例如c++、php中有CTIME这个数字相较于上述类型更好。
4.数据字段属性
1)UNSINGED 可以让空间增加一倍,只能用在数值型字段
2)ZEROFILL 只能用在数值型字段,前导零,该属性自动应用UNSIGNED
3)AUTO_INCREMENT 只能是整数,数据每增加一条(包括留空 NULL 0)就会自动增1,字段的值是不允许重复的
每个表都最好有一个ID字段设置为AUTO_INCREMENT
4)NULL 和NOT NULL
因为每个语言中的NULL可能格式含义不太一样,所以为了可移植性,建议在创建表示每个字段都不要插入NULL,而使用NOT NULL
5)DEFAULT
例如:
CREATE TABLE users( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL DEFAULT '', height DOUBLE(10,2) NOT NULL DEFAULT 0.00, age INT NOT NULL DEFAULT 0, sex CHAR(4) NOT NULL DEFAULT '男' );
5.创建索引
1)主键索引
主要作用是确定数据库表中一条特定数据记录的位置
最好为每一张数据表定义一个主键
一个表只能指定一个主键,主键的值不能为空
2)唯一索引 UNIQUE
为了防止创建重复的值
每一个表可以有多个唯一索引
3)常规索引
- 最重要的技术
- 提升数据库的性能
- 索引顺序 5层 软件 PHP 《细说PHP》 书店
- 可以提高查找的速度,减慢数据列上插入,删除,修改
- 可以单独使用,也可以创建表示创建
- INDEX KEY 是同义词,多列都可以
4)全文检索
FULLTEXT 类型索引,MyISAM 表类型使用,只有在varchar char text 文本字符串上使用
可以多个数据列使用
6.数据表类型(存储引擎)及存储位置
MySQL可以针对不同的存储引擎需求选在最优的存储引擎,它是插件式的,查看存储引擎/表类型:
show engines;
查看配置文件中的表类型:show variables like 'table_type';
1)十二之二:数据表类型MyISAM和InnoDB。
MyISAM表类型:成熟稳定易于管理,表格锁定的机制,强调快速读取操作;有些功能不支持。
用它来进行操作过程中的碎片进行管理:OPTIMIZE TABLE 表名;
InnoDB表类型:操作提交回滚,等安全管理;空间占用量较大。
创建表时指定表类型:CREATE TABLE () TYPE InnoDB/CREATE TABLE () ENGINE InnoDB/
2)存储位置
MyISAM类型:.frm 定义结构;.MYD 存储数据;.MYI 保存索引。
InnoDB类型:.frm和.ibd。
7.MySQL默认字符集
显示校对字符集规则:show collation like 'utf8%';//显示utf-8校对规则。
显示字符集:show character set;
在配置文件中查看服务器中字符集:show variables like 'character_set_server';
在配置文件中查看服务器中校对规则:show variables like 'collation_server';
字符集:是用来定义MySQL存储字符串的方式;
校对规则:是对规则定义了比较字符串的方式;
utf8_unicode_ci:ci是大小写不明感的比较规则,cs是大小写敏感的比较规则,bin是二进制比较规则。
一对多的关系:一个字符集可以对应多个校对规则。
显示所有字符集校对规则:desc information_schema.character_sets;
ASCII
ISO-8895-1/latin1
汉字集:
gb2312-80,国标80年代,6700汉字;不推荐
gb13000,93年,27400字;不推荐
gbk,95年;可以用,2字节,数据库运算量比较大时 定长
gb18030,2000年;数据库支持比较少见
UTF-32
USC-2
UTF-16
UTF-8 Unicode字符集 1-4字节 强烈推荐 互联网 UNIX Linux 非定长
MySQL服务器,数据库,数据表,字段可以设置不同的字符集,每一个字符集缺省为上级字符集设置。
创建库时指定字符集:
CREATE DATABASE d1 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
创建表时默认用库的字符集,也可以指定字符集:
CREATE TABLE T1(id int) ENGINE InnoDB DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
客户端与服务器交互时:
character_set_client
character_set_connection
character_set_results
通常情况下上述字符集和服务器字符集都保证一致就不会乱码;
同时修改上述三个参数的值:SET NAME 字符集;
更改库的字符集:ALTER DATABASE CHARACTER SET gbk;
更改表的字符集:ALTER TABLE t1 CHARACTER SET gbk;
备份库:mysqldump -u root -p --default-character-set=gbk -d d1> c:/111/111.sql //一定要记住没有;号
导入:<
8.修改表
Alter table
查看帮助:? ALTER TABLE;
例如:ALTER TABLE t1 ADD name VARCHAR(30) NOT NULL;
例如:ALTER TABLE t1 ADD age NUSIGNED NOT NULL DEFAULT '0';
总的来说可以通过使用帮助来使用ALTER TABLE。