数据库的学习要求: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代表几位小数。浮点数不精确,他是一个近似值,不适用于对精度要求高的情况,这些情况可以用定点数。定点数就是小数位数固定的小数,例如保留两位的价格,小数点永远在倒数第二位。具体区别参考 讲的很详细。
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。