MySQL学习笔记(1/2)

数据库的学习要求: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。

原文地址:https://www.cnblogs.com/laohan1221/p/5727634.html