Mysql基础知识笔记

修改客户端/服务器默认编码方式为utf8(\S查看) 在my.ini文件中修改  服务器[mysqld]  character-set-server=utf8   客户端  [mysql] default-character-set=utf8  然后在重启下mysql服务

查看数据库的编码方式show create database mysql;

MYSQL存储引擎  show engines \G;  \G可以是每个字段单独打印到行 默认是INNODB

Mysql数据类型   数值型  日期和时间型  字符串型  以及不常用的二进制类型 注意:

-->CHAR 定长字符串占空间大  访问速度快        VARCHAR 变成字符串占空间小访问速度慢

-->ENUM类型(枚举)  SET类型(集合)

Mysql约束条件:

-->主键 PRIMARY KEY 可以简写为KEY 唯一标识对应的数据,有单字段主键和多字段主键  默认情况下AUTO_INCREMENT不是主键,只是如果没有指定主键会将自动编号默认为主键

-->唯一性 UNIQUE KEY 可以简写为 UNIQUE 标识该属性的值是唯一的制定了UNIQUE的值必须是唯一的

-->非空 NOT NULL

-->默认值 DEFAULT

-->外键 FOREIGN KEY

Table的相关操作:

--创建数据表 网站访客注册 用户名 密码 不可为空 用户名需要唯一 id自增长
CREATE TABLE IF NOT EXISTS visitor(
id SMALLINT UNSIGNED KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL UNIQUE,
password VARCHAR(20) NOT NULL,
retime TIMESTAMP NOT NULL DEFAULT NOW()
)ENGINE=INNODB AUTO_INCREMENT=100;

-->创建数据表,先得选择一个数据库 比如 USE test;选择test数据库,在test数据库下 创建了visitor表

-->查看 DESC visitor; 或者SHOW CREATE TABLE visitor;

-->插入数据如下:

INSERT visitor(username,password) VALUES(‘tangxin‘,‘root‘);

INSERT visitor(username,password) VALUES(‘josh‘,‘josh‘);

-->查询插入的数据SELECT *FROM visitor;

-->删除表中一条记录 DELETE FROM visitor WHERE id=102;

-->重命名表r ename table visitor  to test; 或者ALTER TABLE visitor RENAME test;

-->更改数据表某个内容 UPDATE visitor SET username=‘Jhon‘ WHERE id=104;

-->添加字段ALTER TABLE visitor ADD age TINYINT UNSIGNED NOT NULL;

-->删除字段  ALTER TABLE visitor DROP age;  或者ALTER TABLE visitor DROP column age;

-->修改字段ALTER TABLE visitor MODIFY username VARCHAR(10) NOT NULL UNIQUE;

-->添加默认值ALTER TABLE visitor ALTER age SET DEFAULT 18;

-->删除默认值ALTER TABLE visitor ALTER age DROP DEFAULT;

-->添加删除主键  ALTER TABLE visitor DROP PRIMARY KEY;  ALTER TABLE visitor ADD PRIMARY KEY(id);

  但是如果指定的主键是自增长 必须先去掉自增长才能删除成功!!!

-->添加删除唯一ALTER TABLE visitor DROP INDEX|KEY username;  DROP INDEX username ON visiotr;

           ALTER TABLE visitor ADD UNIQUE(username);或者CREATE UNIQUE INDEX ON visitor(useername);

-->查询记录  SELECT username,id,password,retime FROM visitor WHERE id=100;

-->模糊查询 SELECT * FROM visitor WHERE username [NOT] LIKE ‘%t‘;   %匹配任意字符   _匹配单字符  还有[ ] ,[^ ]

-->范围查询 SELECT *FROM visitor WHERE username IN(‘josh‘,‘tang‘,‘xxx‘,‘rrrr‘);       SELECT *FROM visitor WHERE id BETWEEN 90 AND 102;

-->分组查询 SELECT *FROM visitor GROUP BY id;

--> 聚合函数比如SELECT COUNT(id) FROM visitor;  也可以求和求平均数求最大最小值  还有sum() max() min()等等聚合函数

-->分组查询和聚合函数配合使用  SELECT COUNT(id) FROM visitor GROUP BY id;

-->  限定组的结果使用HAVING 因为where不能配合聚合函数使用

-->ORDER BY  ASC;从小到大排序;   DESC; 按sal从大到小排序

-->limit 对返回结果进行限定

测试 内连接 外链接  外键

--测试内连接  外链接 外键
--创建部门table  proid departame
CREATE TABLE depart(
proid TINYINT UNSIGNED,
departame VARCHAR(20)
);

INSERT INTO depart VALUES(1,‘COREPART‘),(2,‘BSPPART‘),(3,‘OSPPART‘),(4,‘CSPPART‘);

--创建员工table 所属部门id 人员名字
CREATE TABLE employee(
id TINYINT UNSIGNED,
name VARCHAR(20),
age TINYINT UNSIGNED
);

INSERT employee VALUES(1,‘Green‘,28),(1,‘Justin‘,28),(2,‘josh‘,27),(2,‘Jothan‘,29),(3,‘Brooks‘,28),(4,‘Rick‘,32),(1,‘Kervin‘,29);

--测试内连接
SELECT d.proid,d.departame,e.name,e.age FROM

depart AS d

JOIN employee AS e

ON d.proid=e.id

ORDER BY proid ASC;

--测试外连接
--左连接 部门BMCPART在员工表中没有对应数据 但是查询是依旧会显示出来 显示为NULL 右连接 全连接同理
INSERT INTO depart VALUES(5,‘BMCPART‘);

SELECT d.departame,e.name FROM

depart AS d

LEFT JOIN employee AS e

ON d.proid=e.id

ORDER BY proid ASC;

--测试外键
--先删除部门5 BMCPART
DELETE FROM depart WHERE proid=5;

--向部门5插入了一个员工 可以成功插入 但是部门5压根不存在 这种情况下我们需要外键约束
INSERT employee VALUES(5,‘Leo‘,26);

--创建外键table
CREATE TABLE employee(
id TINYINT UNSIGNED,
name VARCHAR(20),
age TINYINT UNSIGNED,
CONSTRAINT em_fk_dp FOREIGN KEY(id) REFERENCES depart(proid)
);

--这个时候往部门5插入员工就会报错
INSERT employee VALUES(5,‘Leo‘,26);

--在主表数据发生改变时,与之关联的从表数据应该如何处理 on update | on delete
--先删除外键
ALTER TABLE employee DROP FOREIGN KEY em_fk_dp;

--cascade关联操作,如果主表被更新或删除,从表也会执行相应的操作
--set null,表示从表数据不指向主表任何记录
--restrict:拒绝主表的相关操作
--添加外键
ALTER TABLE employee ADD CONSTRAINT em_fk_dp FOREIGN KEY(id) REFERENCES depart(proid) ON DELETE CASCADE;

--如果主表删除部门1 部门1下的员工也应该删除
DELETE FROM depart WHERE proid=1;

SELECT *FROM employee;

--联合查询 UNION 加上ALL 不删除重复行  查询的column必须一致
SELECT proid,departame FROM depart

UNION ALL

SELECT id,name FROM employee;

--子查询
--where型子查询 把内层查询结果当作外层查询的比较条件
SELECT * FROM depart WHERE depart.proid=ANY(SELECT id FROM employee);

--from子查询 把内层的查询结果供外层再次查询 后面的AS t不能少 每个派生出来的表都需要一个别名
SELECT departame FROM (SELECT *FROM depart WHERE proid=2) AS t;

--exits子查询 把外层查询结果拿到内层,看内层的查询是否成立
SELECT proid,departame FROM depart WHERE EXISTS(SELECT *FROM employee WHERE depart.proid=employee.id);

--正则表达式查询 REGEXP 比如 具体详细看看正则表达式
SELECT *FROM employee WHERE id REGEXP ‘.‘;

--MYSQL函数库 包括 数学函数 字符串函数 条件判断函数 系统信息函数 日期和时间函数等
--http://www.cnblogs.com/kissdodog/p/4168721.html

索引:

对于千万级别以上的数据,索引可以加快查询速度 一般有B-TREE索引 以及 HASH索引  MYIASM INNODB存储引擎支持B-TREE索引  MEMORY存储引擎支持HASH索引

索引类型:PRIMARY , INDEX , UNIQUE , FULLTEXT , SPAIAL

--创建唯一性索引
--一个表可以有多个唯一性索引 但是只能有一个主键索引
CREATE TABLE test_index2(
id TINYINT UNSIGNED NOT NULL KEY,
username VARCHAR(20) UNIQUE,
unicard CHAR(18),
UNIQUE KEY in_unicard(unicard)
);

--全文索引在查询很长的一篇文章是很有用,内容不多的话普通索引足矣
--SPAIAL 控件索引使用较少 暂不考虑

--创建单列索引 形式和普通索引一样
CREATE TABLE test_index3(
id TINYINT UNSIGNED AUTO_INCREMENT NOT NULL KEY,
test1 VARCHAR(20) NOT NULL,
test2 VARCHAR(20) NOT NULL,
test3 VARCHAR(20) NOT NULL,
test4 VARCHAR(20) NOT NULL,
INDEX in_test1(test1)
);

--创建多列索引
CREATE TABLE test_index4(
id TINYINT UNSIGNED AUTO_INCREMENT NOT NULL KEY,
test1 VARCHAR(20) NOT NULL,
test2 VARCHAR(20) NOT NULL,
test3 VARCHAR(20) NOT NULL,
test4 VARCHAR(20) NOT NULL,
UNIQUE INDEX mul_test1_test2_test3_test4(test1,test2,test3,test4)
);

--删除索引
DROP INDEX in_id ON test_index;
ALTER TABLE test_index DROP INDEX in_username;

--命令行创建索引
CREATE INDEX in_id ON test_index(id);
ALTER TABLE test_index ADD UNIQUE INDEX in_username(username);

PS:

图形化界面管理数据库 比如PHPadmin方式的web管理  或者 下载sqlyog软件来进行管理

时间: 2025-01-31 07:38:42

Mysql基础知识笔记的相关文章

初学MySQL基础知识笔记--第一天

本人初入博客园,第一次写博客,在今后的时间里会一点点的提高自己博客的水平,以及博客的排版等. 在今天,我学习了一下MySQL数据库的基本知识,相信关于MySQL的资料网上会有很多,所以我就不在这里复制粘贴了,在这里留下一些本人在初学MySQL时的一些笔记,以供有需要的同学来参考.以下内容绝无复制,仅仅是博主自己的一些总结. 字段类型 数字:int,decimal(小数) eg:decimal(5,2):一共包含5位数,小数部分有2位 字符:char(存的字符是固定的),varchar(存的字符是

初学MySQL基础知识笔记--02

查询部分 1> 查询数据中所有数据:select * from 表名 2> 查询数据中某项的数据:eg:select id,name from students; 3> 消除重复行:eg:select distinct gender from students; (指删除gender中重复的所在行) *注:eg:select distinct id,gender from students; 则需要两行都重复才不显示,例如id均不同,则全部显示. Select * from 表名 whe

mysql基础知识之增删查改使用介绍

 mysql基础知识之增删查改使用介绍 本文主要介绍mysql常用的SELECT.INSERT.UPDATE.DELETE语句的使用,数据库的安装这里不做介绍,并且事先已经准备好相关数据. 本文中使用的student表中的数据如下: mysql> SELECT * FROM student; 一.SELECT语句的使用 1.单表查询 语法格式: SELECT culom1,culom2,culom3 FROM TABLE_NAME; 可以改变字段显示顺序 2.WHERE子句查询 语法格式: SE

MySQL基础知识

MySQL基础知识: 一. 知识点:        1. SQL分类:按照其功能不同,分为3中类别           DDL(Data Defintion Language):数据定义语句,用于定义不同的数据段.数据库.表.列.索引等.常用的语句关键字包括create.drop.alter等;             DML(Data Manipulation Language):数据操纵语句,用于添加.删除.更新和查询数据库记录,并检查数据的完整性.常用的语句关键字主要包括insert.de

原生ajax基础知识笔记

原生ajax基础知识笔记 1.创建 XMLHttpRequest 对象 所有现代浏览器(IE7+.Firefox.Chrome.Safari 以及 Opera)均内建 XMLHttpRequest 对象. 老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveXObject. 代码示例: // Creates a XMLHttpRequest object. var xhr = new XMLHttpRequest(); 兼容浏览器代码示例: var xhr; /

网络连接相关基础知识笔记

一.常说的TCP/IP的含义 TCP/IP协议簇并不仅仅指TCP协议和IP协议,实际它包括了一系列协议组成的集合,如:TCP,IP,UDP,FTP,SMTP,DNS,ARP,PPP等 TCP与UDP协议都属于传输层协议,但有很大不同,TCP是面向连接的协议,提供的是可靠的数据流服务,TCP采用"带重传的肯定确认"机制来实现传输的可靠性,实现了一种"虚电路",因为从物理上来说,并不是真正在两台主机间建立了连接,这种连接只是存在于逻辑上的.最大的开销出现在通信前建立连接

Oracle基础知识笔记(10) 约束

大清早打开vs2008,出现这么诡异的错, 删了一个dll的就好了.如图 Oracle基础知识笔记(10) 约束

Oracle基础知识笔记(11) 建表、更新、查询综合练习

有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系号department) 项目item(项目编号itemid,项目名称itemname,项目比赛地点location) 成绩grade(运动员编号id,项目编号itemid,积分mark) 请用SQL语句完成如下功能: 1.  建表,并在相应字段上增加约束: 定义各个表的主键和外键约束: 运动员的姓名和所属系别不能为空: 积分要第为空值,要么为6,4

趁一切还来得及【一】数据库MySQL基础知识及编译安装

此情更待成追忆,只是当时已惘然.                                        --[唐]李商隐 第一章 数据库概述及分类特点应用 1.1 数据库种类.语言处理.典型产品 ①数据库的理解:就是一个存放数据的仓库,这个仓库是按照一定的数据结构,来组织和存储的.可以通过数据库提供的多种方法来管理数据库. ②数据库的种类:按照早期的数据库理论分为层次数据库.网络式数据库.和关系型数据库.当今互联网最常用的就是关系型数据库和非关系型数据库(NOSQL). ③关系型数据库: