MySQL——数据库、数据表、数据操作、字符编码

原创
2015/11/16 17:04
阅读数 37
--数据库--数据表--数据--


-------------------数据库发展史-------------------
--1.萌芽:文件系统--安全性低
--2.第一代:
----a)层次模型(导航结构)--缺点:查询不是同一类数据效率低,易造成数据不完整
----b)网状模型
--3.第二代:关系型数据库--特点:a)表相互独立;b)表与表通过公共字段建立关系


----------------SQL语句------------------
--SQL
--Structured query language
--结构化查询语言,用来操作关系型数据库的一门语言

--语言种类
----1、标记语言:HTML,XML
----2、脚本语言:PHP、JavaScript
----3、结构化查询语言:SQL

--连接数据库
--mysql -h localhost:80 -P 3306 -u root -p root
--1、-h:host,主机,本地主机+端口号,默认80可省略
--2、-P:port,mysql服务器端口号,默认3306可省略
--3、-u:user,用户名,root
--4、-p:password,用户密码,root

--退出数据库
--1、exit
--2、quit
--3、\q

--数据库基本概念
--1、关系:两个表的公共字段
--2、表:存放数据,行和列组成
--3、行:也叫记录
--4、列:也叫字段、属性
--5、对于结构而言:分成行和列
--6、对于数据而言:分成记录和字段
--7、数据冗余:相同的数据存储在不同地方称为数据冗余
----解决:将冗余表拆分成多个表,通过公共字段建立关系
----冗余只能减少不能杜绝
--8、数据完整性:正确性+准确性=数据完整性
----a)正确性:数据类型正确
----b)准确性:范围正确,符合逻辑


-------------------数据库操作----------------------
--创建数据库
--默认使用utf-8字符集(安装时选择的mysql默认字符集)
create database day1;
--charset=utf8|gbk
--创建数据库时指定字符集
create database php charset=utf8;
--``
--如果创建的数据库名使用的是关键字或者特殊字符,必须用反引号``引起来
create database `@#`;
--if not exists
--创建数据库时判断数据库是否已经存在
create database if not exists day1;

--MySQL数据库存放的目录
--在MySQL配置文件my.ini中设置
--datadir="d:/wamp/mysql/data"
--新建一个数据库,会自动新建一个文件夹,并新建一个db.opt文件
--db.opt文件包含了字符集和校对集
--default-character-set=utf8
--default-collation=utf8_general_ci

--显示数据库
show databases;
--MySQL系统数据库
--1、information_schema:存储了数据库的信息,比如数据库名等
--2、mysql:mysql系统数据库
--3、performance_schema:MySQL5.5以上版本新增的存储引擎,只用来收集服务器性能参数
--4、test:用来给用户学习和测试的

--查看创建数据库的语法
show create database day1;
show create database php\G

--修改数据库
alter database day1 charset=gbk;

--删除数据库
drop database day1;
--删除数据库前检查数据库是否存在
drop database if exists day1;

--选择数据库
use day1;

--注释
--1、单行注释:--
--2、多行注释:/* */

---------------------数据表操作-------------------------
--表操作
create table `student`(
       id int unsigned not null auto_increment primary key comment '编号',
       name varchar(50) not null,
       `addr` varchar(50) default '地址不详'
       )engine=innodb charset=utf8;

--null|not null:表示字段是否允许为空
--default:默认值
--auto_increment:自动增长
--comment:备注
--primary key:主键
--engine:存储引擎
--charset:字符编码

--给指定的数据库创建表
create table day1.student(
       id int,
       sex char(1)
)engine=myisam charset=utf8;

--数据表的文件
--一个数据库对应一个文件夹,一个表对应一个或多个文件
--1、myisam:这种存储引擎一个表有3个文件
----table.frm:表结构
----table.MYD:表数据
----table.MYI:表索引
--2、innodb:这种存储引擎一个表有一个文件
----table.frm:表结构
----innodb的数据放在data目录下一个文件中统一管理:ibdata1
----如果数量过多,MySQL自动新建ibdata2,ibdata3...

--myisam和innodb存储引擎的区别
--1、myisam读取速度快,但是容易产生碎片,且不支持事务、触发器等
--2、innodb读取的速度没有myisam快,但不容易产生碎片,支持事务、触发器等功能。
--3、默认为innodb

--查看表
show tables;

--查看表结构
describe student;
desc student;

--查看创建表的语法
show create table student;
show create table student\G

--删除表
drop table student;
drop table if exists student;

--更改表
alter table student engine=innodb;

--添加字段
--默认添加到字段最后
alter table student add addr varchar(50) default '地址不详';
--通过first关键字添加到最前面
alter table student add age tinyint unsigned null first;
--通过after关键字添加到指定地段的后面
alter table student add phone varchar(20) after age;

--删除字段
alter table student drop phone;

--修改字段属性
alter table student modify id int unsigned first;
--修改字段名称和属性
alter table student change id stuid int(10) unsigned;

--修改表名
alter table student rename to stu;

--将表移动到其他数据库
alter table stu rename to day1.myStu; 

-----------------------------数据操作-----------------------
--插入数据
--值和字段名一一对应
insert into student (id,age,sex,addr) values (1,23,'男',default);
--省略字段名,值的顺序和个数必须和表中的字段顺序和个数一致
--自动增长列通过null实现
insert into student values (null,'陈旭',22,'男','江西');
--插入多个数据用逗号分隔
insert into student values (null,'姚明',30,'男','上海'),(7,'武则天',87,'女','唐');
--通过insert...set...插入数据
insert student set id=null,name='李师师',age=17,sex='女',addr='明';

--更新数据
update student set name='崇祯' where id=1;
--将前三行记录的age改为28
update student set age=28 limit 3;
--按照姓名升序排序后将前三行记录的sex设为女
update student set sex='女' order by age limit 3;

--删除数据
delete from student where id=1;
--按姓名降序排列,删除前三个
delete from student order by name desc limit 2;
--删除所有记录
delete from student;
--清空表
--清空表就是把原来的表删除,并按照原来的表结构创建一个新表
truncate table student;


---------------------------字符编码--------------------------
--字符集
--可见字符在保存和传输的时候对应二进制代码的集合
--字符集在两个地方用到
--1、数据在存储的时候
--2、数据在传输的时候

--在存储的时候用到字符集
--1、在安装MySQL服务器的时候设置字符编码
--2、在创建数据库的时候设置
create database day1 charset=utf8;
--3、在创建表的时候设置
create table yy (
)engine=myisam charset=gbk;
--4、在字段上设置
create table yy (
       stuName varchar() charset utf8
);
--一般在数据库上设置,在数据库上设置以后表上和字段上就不要设置了

--查看cmd命令提示符客户端、MySQL服务器、查询结果返回时的字符编码
show variables like 'character_set_%';
--设置返回结果字符编码
set character_set_results=gbk;
--一次更改client、connection、results字符编码
set names gbk;

--校对集
--校对集依赖于字符集,在某种字符集下,字符和字符之间的关系是校对集决定的
--比如:a和B,如果区分大小写a>B,如果不区分大小写 a<B
--通过collate关键字设置校对集

--新建两个不同校对集的表
create table t1(
name varchar(10)
)charset=utf8 collate=utf8_general_ci

create table t2(
name varchar(10)
)charset=utf8 collate=utf8_bin;

insert into t1 values ('a'),('B');
insert into t2 values ('a'),('B');

--_ci:表示不区分大小写进行比较
--_cs:区分大小写进行比较
--_bin:按对应的二进制编码进行比较

--查看所有字符集
show character set
--查看所有校对集
show collation


展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部