一、初识数据库
1、什么是数据库
数据库叫database ,简称DB,是长期存放在计算机内,有组织、可共享的大量数据的集合;数据库就是存放数据的仓库,专业的数据库系统具有较小的数据冗余度,较高的数据安全性,易扩展性。
数据库设计原则:
mysql主要优势:一个应用对应一个数据库
2、数据库分类
关系型数据库(保证数据的一致性,能建立关系) | 非关系型数据库(放在不同的服务器上) |
---|
MySQL(中小型企业免费) | MongoDB(文档存储) | Oracle(大型电商网站) | Redis(键值存储) | SQL Server(政府网站,大学教育) | Memcached(键值存储) | maradb(mysql开源版本的一个分支) | Hbase(列存储) | db2(银行系统) | Neo4J(图形) | sybase(被淘汰) | |
补充:ER关系图
补充:服务器
服务器是一台电脑,这台电脑安装了服务器软件,这些软件会监听不同的端口号,根据用户访问的端口号提供不同的服务
3、DBMS、DBS、DBA区别
- DBMS是数据库管理系统,是一种系统软件,包括数据库和用于数据库访问管理的接口系统,通常将DBMS直接称为数据库,严格意义上说mysql属于DBMS
- DBS是一个实际可运行的系统,由软件、数据库、数据库管理员组成
- DBA数据库管理员
4、MySQL简介
-
概念 是现行的开源、免费的关系型数据库 -
特点
- 运行速度快
- 使用成本低
- 容易使用
- 可移植性强
- 适用更多用户
-
mysql语句分类
DDL | DML | DQL | DCL |
---|
数据定义语言 | 数据操纵语言 | 数据查询语言 | :数据控制语言,定义访问权限、取消访问权限,安全设置 | create、drop、alter | ,insert、update、delete | select | grant |
5、mysql的安装、卸载及启动mysql服务
mysql5.5安装教程
-
运行安装程序、在启动配置教程以前,一路下一步直到finish -
第一次finish之后启动服务配置教程 -
第一个induce mysql bin dinctory to windows path -
第二个端口号不要去修改,字符集要选择utf-8,默认端口号:3306 -
卸载
- 打开控制控制面板删除软件
- 删除mysql安装目录的所有文件
- 删除mysql数据存放的文件,C:\ProgramData\MySQL
-
启动mysql服务方式
- 任务管理器打开
- 命令行输入:service(查看本地服务)
- dos窗口输命令:net start mysql
-
MysqlInsranceConfig:配置向导
- programDate:数据文件的保存路径(默认是隐藏的,在C盘下)
- mysql的安装目录下的my.ini文件:相应的一些配置,可配置编码格式等
- mysql -uroot -paaaaa123 进入mysql
- show databases显示所有的数据库
- select version()显示mysql版本号
二、DDL语句创建数据库和数据表
1、连接数据库(在dos窗口下)
-
cmd——以管理员身份运行 -
启动mysql数据库服务:net start mysql -
登录mysql:mysql -uroot -paaaaa123(或者:mysql -hlocalhost -uroot -paaaaa123)注意-p以后不能有空格 -
exit退出mysql -
show databases;(显示数据库,一定要加分号) -
use mysql -
show tables(显示数据库中的表) -
sql语句select * from user\G;显示user用户列表 -
修改user用户密码:update user set password=password’(1234’ ) where user=‘root’;,flush privileges;刷新下 -
?寻求帮助 -
查看mysql所支持的引擎类型、表类型:SHOW ENGINES; -
查看默认引擎:SHOW VARIABLES LIKE ‘storage_engine’; -
显示变量:show variables like’auto%’
2、数据库操作
-
创建数据库 CREATE DATABASE [IF NOT EXISTS ]数据库名; -
删除数据库 DROP DATABASE [IF EXISTS] 数据库名; -
修改数据库字符集 alter database 数据库名 character set 字符集 -
查看数据库
- 查看所有数据库:show databases
- 查看数据库定义:show create databse 数据库名
- 查看当前正在使用的数据库:select database()
-
选中数据库 use 数据库名
3、表结构操作
4、保存sql文件以及打开sql文件
保存Ctrl+s
新建查询编辑器——在同一标签中打开文件(在不同标签中打开)
对于图像声音视频用text、blob存储数据
一般没有必要直接存储图像,而存储的是路径用字符串
三、DML语句对表中数据CRUD操作
1、主键&外键
-
主键咋一个表里面可有也可以没有, -
一个表里面的外键既可以有一个也可以有多个, -
建立主外键关系的有主键的表为主表,有外键的表成为子表或者从表 -
能够保证数据的完整性和 正确性 -
对于有主外键关系的表,数据插入操作要有一定顺序,先放主键数据,再放外键数据 ,先删除子表,再删除主表 -
主键和外键,列名可以不同,但是数据类型一定要相同 -
主键和外键建立联系第一种方法在建表的时候就联系,关键词是constraint,外键名一般以FK开头 foreign key代表外键,引用主键用关键词reference -
主键&外键相关的SQL语句 - 创建主键&外键
- 1、创建此表的同时就创建外键
- 主键:PRIMARY KEY可写在列后面,也可以字段都写完了在最后一行写明PRIMARY KEY(字段名 )
- 外键:CONSTRAINT FR_gradeId FOREIGN KEY (要添加主键的字段) REFERENCES 引用表(引用表中的哪个字段)(FR_gradeId字段名)
- 2、创建字表完毕后,修改子表增加外键
- ALTER TABLE 表名
- ADD CONSTRAINT 外键名 FOREIGN KEY (要添加主键的字段) REFERENCES 引用表(引用表中的哪个字段);
- 删除外键
- ALTER TABLE 表名 DROP FOREIGN KEY 外键名;
- (删除了之所以还能看到外键在表中,是因为外键会默默的创建了一个索引,要想彻底删除还要加上一句话删除索引
- ALTER TABLE 表名 DROP INDEX 外键名;
- 删除外键要有两句话才能彻底删除)
复制代码
2、插入数据
-
insert into 表名(列名1,列名2) values(值1,值2) -
insert into 表名 values(值1,值2) -
insert into 表名(列名1,列名2) values(值1,值2),(值1,值2) 批量插入数据 -
注意点:
- 批量插入比单条插入效率更高,但是更容易出现问题
- 插入全部列名可以省略,插入部分列的话就不能省略表名后面的列名。
- 有默认值的时候在values里面可以写默认值也可以写default
- 如果不写列名的情况下即使有些列可以为空,但是不能不写要写null,最好都写上列名,如果外键值超过了主表的主键数目,会报错
3、删除数据
- delete from 表名 【where条件】
- truncate table 表名
- delete 和 truncate 的区别
- delete 是DML语句 一条一条删除表中数据
- truncate是DDL 先删除表再重建表
- 关于哪条执行效率高,具体要看表中的数据量,如果数据比较少,delete高效,数据多,则truncate效率高
- 当使用不带where条件的delete from删除数据时,自增当前数值依然从原来基础上进行,会记录日志,不删除表结构,但使用truncate table删除表中全部数据的时候,自增当前数值不从原来基础上进行,从原来自增初始值开始。如下例子:不会记录日志
- 两种不同村粗引擎,在使用delete from删除全部数据后,自增列初始值表现的不同:同样使用delete from清空数据,重启数据库服务后,对于INNODB的表,自增列从初始值从新开始(比如开始默认初始值是1,那就从1再开始),而对于MYISAM型的表,自增序列从上一个自增数据基础上开始,原因是:INNODB的数据是储存在内容中的,重启数据可服务后,之前的也就都没有了,而MYISAM是储存在文件中,就算重启,数据依然存在。
4、修改数据
- update 表名 set 列名=值【where条件】
四、DQL查询语句
1、AS为字段取别名
AS可省略
2、Dinstinct去重复项
select distinct 字段名 from 表名
3、通用格式 - select [distinct] [*] [列名1,列名2] from 表名 where 条件
- group by...
- having
- order by
复制代码
4、基础查询 - #查询数据用DQL语句
- #1、核心查询(*代表查询所有列,效率比较低)
- SELECT * FROM student;
- #2、查询指定列,查询student的学号和姓名,在mysql中列名不区分大小写
- SELECT studentno,studentname FROM student;
- #3、被查出的列取别名(给列取别名as可以省略)
- SELECT studentno AS 学号,studentname AS 姓名 FROM student;
- SELECT studentno 学号,studentname 姓名 FROM student;
- #6、给表取取别名(给表取别名as可以省略),别名不会该表原表的列名,只是为了看的
- SELECT studentno 学号,studentname 姓名 FROM student AS 学生表;
- SELECT studentno 学号,studentname 姓名 FROM student 学生表;
- #7、as为查询结构(如函数)取一个新的名字
- SELECT CONCAT('姓名:',studentName)AS 新姓名 FROM student;
- #8、查看那些同学参加了考试(学号),去除重复项,用关键字distinct,默认为all代表查询所有行
- SELECT DISTINCT studentno FROM result;
- 注意:distinct一定写前面
- SELECT DISTINCT NAME NAME,english FROM exam;
- #9、select中可以出现表达式
- SELECT @@auto_increment_increment;
- SELECT VERSION();
- SELECT 100*3-1 AS 计算结果
- SELECT studentno,studentresult+1 AS 提分后 FROM result;
- #10、满足条件的查询(where) 考试成绩95-100
- SELECT studentno,StudentResult
- FROM result
- WHERE StudentResult>=95 AND StudentResult<=100;
复制代码
5、模糊查询 - #13、精确查询
- SELECT studentno,StudentResult
- FROM result
- WHERE studentno=1000;
- #15、查询除了1000号这个学生,其他学生的考试成绩!=
- SELECT studentno,StudentResult
- FROM result
- WHERE studentno !=1000;
- #16、或者用not和!=一样
- SELECT studentno,StudentResult
- FROM result
- WHERE NOT studentno =1000;
- #17、模糊查询between and/ like/in/null
- #查询姓李的同学的学号和姓名
- #like及结合使用的通配符,%(0到任意一个字符) _(一个字符)
- #查询所有姓李的同学
- SELECT studentno,StudentName
- FROM student
- WHERE StudentName LIKE '李%';
- #查询姓李的,名字是三个字的
- SELECT studentno,StudentName
- FROM student
- WHERE StudentName LIKE '李__';
- #查询所有带有“文字的”(不管开头和结尾)常用
- SELECT studentno,StudentName
- FROM student
- WHERE StudentName LIKE '%文%';
复制代码- 转义字符%——\%
- _——\_
- 如何不想用\作为转义字符,可以自定义转义字符,使用自己定义的转衣服:escape ‘你定义的转义符’但是%和_是不可以自行设计的
- #模糊查询之 in
- SELECT studentName,studentNo FROM student
- WHERE studentNo IN(1000,1001,1002,1003);
- SELECT studentName,studentNo FROM student
- WHERE Address IN('北京','南京');
- #模糊查询之 null
- 注意:只有是显示null的才为空,对于空白什么都没有的并不是空null而是字符串为空,如:
复制代码- #查询家庭住址没有写的同学
- #1、错误用法
- SELECT studentname FROM student
- WHERE Address IS NULL;
- #2、用空字符串
- SELECT studentname FROM student
- WHERE Address='';
- #3、一般这种类型的查询用这种写法
- SELECT studentname FROM student
- WHERE Address='' OR Address IS NULL;
复制代码- #查询出生日期没有填写的同学,=null是错误的,和null比较要用iis null
- SELECT studentno FROM student
- WHERE BornDate IS NULL;
- #对于不是空的要用is not null
- SELECT studentname FROM student
- WHERE BornDate IS NOT NULL;
复制代码
6、分组查询 - #不同课程的平均分、最高分、最低分
- SELECT subjectname, AVG(StudentResult) AS 平均分,MAX(StudentResult) AS 最高分,MIN(StudentResult) AS 最低分
- FROM result r
- INNER JOIN `subject` sub
- ON r.SubjectNo=sub.SubjectNo
- GROUP BY r.subjectno
- #分组后再筛选执行的sql语句筛选
- SELECT subjectname, AVG(StudentResult) AS 平均分,MAX(StudentResult) AS 最高分,MIN(StudentResult) AS 最低分
- FROM result r
- INNER JOIN `subject` sub
- ON r.SubjectNo=sub.SubjectNo
- GROUP BY r.subjectno
- HAVING 平均分>80
- ORDER BY 平均分 DESC
- LIMIT 0,4
复制代码
7、连接查询
内连接 | 左连接 | 右连接 | 自连接 | 等值连接 | 非等值连接 |
---|
nner join | left join | right join | \ | \ | \ | 查询两个表结果集中的交集 | 以左表为基准,右边表来一一匹配,匹配不上的返回左表记录,右表以null填充 | 以右表为基准,右边表来一一匹配,匹配不上的返回左表记录,左表以null填充 | 自连接的表一定要取别名(AS)子栏目父栏目问题 | 和内连一样,只是写法不同 | 区别于等值连接,不加where |
- 等值连接:
- SELECT s.StudentNo,StudentName,subjectno,StudentResult
- FROM student s,result r
- WHERE s.StudentNo = r.StudentNo;
复制代码- #自连接代码
- CREATE TABLE IF NOT EXISTS category(
- categoryId INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '当前栏目',
- pId INT(10) NOT NULL COMMENT '当前栏目的父栏目',
- categoryName VARCHAR(50) NOT NULL,
- PRIMARY KEY (categoryId)
- )
- INSERT INTO category
- VALUES (2,1,'美术设计'),
- (3,1,'软件开发'),
- (4,3,'数据库基础'),
- (5,2,'ps基础'),
- (7,2,'色彩搭配'),
- (8,3,'PHP基础'),
- (9,3,'java基础');
- SELECT * FROM category;
- SELECT categoryName '知足上进' FROM category;
- #将各个栏目的父子栏目显示出来(父栏目名称 子栏目名称)
- SELECT a.categoryName AS '主栏目',b.categoryName AS '子栏目'
- FROM category AS a,category AS b;
- WHERE a.categoryId=b.pId;
复制代码
8、排序
group by having - #查询《数据库结构—1》的所有考试的同学(学号、学生姓名、科目名、分数)
- SELECT s.StudentNo,StudentName,subjectname,StudentResult
- FROM student AS s
- INNER JOIN result AS r
- ON s.StudentNo = r.StudentNo
- INNER JOIN `subject` AS sub
- ON r.SubjectNo=sub.SubjectNo
- WHERE SubjectName='数据库结构-1'
- ORDER BY StudentResult DESC,studentno DESC #1、默认升序asc 2、desc为降序
- #常见错误:ORDER BY StudentResult ,studentno DESC 这时候StudentResult升序,studentno降序,desc是就近原则
复制代码
9、分页查询
- limit 索引,页容量
- 当前页码-1)*页容量,页容量
- #分页查询
- ##查询《数据库结构—1》的所有考试的同学(学号、学生姓名、科目名、分数)
- #每页显示五条数据出来
- SELECT s.StudentNo,StudentName,subjectname,StudentResult
- FROM student AS s
- INNER JOIN result AS r
- ON s.StudentNo = r.StudentNo
- INNER JOIN `subject` AS sub
- ON r.SubjectNo=sub.SubjectNo
- WHERE SubjectName='数据库结构-1'
- ORDER BY StudentResult DESC,studentno DESC
- #limit 0,5 #从哪条记录开始起始行0,要显示几行
- LIMIT 5,5 #第二页
- LIMIT 10,5 #第三页 (等于linit 5 offset 0)
复制代码
10、子查询
- 定义:子查询就是在查询语句中的where条件子句中,又嵌套了另外一个select查询语句
- #子查询
- #分部写简单sql语句,然后去嵌套
- SELECT studentno ,studentname FROM student WHERE studentno IN()
- SELECT studentno FROM result WHERE StudentResult>=80 AND subjectno=()#1\2\3\4
- SELECT subjectno FROM `subject` WHERE SubjectName='高等数学-2' #2
- SELECT studentno, studentname FROM student WHERE studentno IN(
- SELECT studentno FROM result WHERE StudentResult>=80 AND subjectno=(
- SELECT subjectno FROM `subject` WHERE SubjectName='高等数学-2' ))
复制代码
五、mysql函数
1、数学函数
ABS() | CEILING() | FLOOR() | RAND() | RAND() |
---|
绝对值 | 大于等于我的最小的整数 | 小于等于我的最大的整数 | 返回0-1之间的随机数 | 每次生成固定的0-1之间的随机数(以某个数作为种子) | SELECT ABS(-8) ‘-8的绝对值’ | SELECT CEILING(9.8)=10 | SELECT FLOOR(9.8)=9 | \ | \ |
2、字符串函数 - #返回字符串中包含的字符数
- SELECT CHAR_LENGTH ( '好好学习数据库')
- #合并字符串
- SELECT CONCAT('我','爱')
- #替换字符串,从某个位置开始,替换某个长度,替换的内容
- SELECT INSERT('我爱你婺源',1,3,'很爱')
- SELECT INSERT('我爱你婺源',1,3,'很爱') #如果起始位置超过字符串长度,则返回原长度
- #变小写
- SELECT LOWER('I LOVE YOU')
- #变大写
- SELECT UPPER('i love you')
- #从左边截取指定长度的字符串
- SELECT LEFT('我爱你中国',3)
- ##从右边截取指定长度的字符串
- SELECT RIGHT('我爱你中国',3)
- #替换字符串(要替换的字符串,要替换的文字,替换的内容)
- SELECT REPLACE('中国欢迎你,你好','你','你们')
- #截取(从哪个位置开始截取,截取多长)
- SELECT SUBSTRING('中国欢迎你,你好',1,2)
- #反转
- SELECT REVERSE('中国欢迎你')
复制代码
3、日期和时间函数 - #获得当前日期
- SELECT CURRENT_DATE()
- SELECT CURDATE()
- #获得当前日期和时间
- SELECT NOW()
- SELECT LOCALTIME()
- SELECT SYSDATE()
- #分别获取日期中的某个部分
- SELECT YEAR(NOW())
- SELECT MONTH(NOW())
- SELECT DAY(NOW())
- SELECT HOUR(NOW())
- SELECT MINUTE(NOW())
- SELECT SECOND(NOW())
复制代码
4、系统信息的函数 - SELECT VERSION()
- SELECT USER()
复制代码
5、聚合函数 - #聚合函数:返回的是一个值,不要出现多个值
- #count(字段名) 是非空值的计数
- count(*)返回所有列的统计
- SELECT COUNT(StudentName) FROM student
- SELECT COUNT(1) FROM student
- #sum()求总和
- SELECT SUM(StudentResult) AS 总分 FROM result
- SELECT AVG(StudentResult) AS 平均分 FROM result
- SELECT MAX(StudentResult) AS 最高分 FROM【】 result
- SELECT MIN(StudentResult) AS 最低分 FROM result
复制代码
count(*)尽量少用
六、MySql事务
1、事务定义
事务就是将一组sql语句放在同一批次内去执行,如果一个sql语句错误,则该批次的所有sql语句都将取消执行,最能理解的就是银行转账
注意: mysql事务只支出innoDB和BDB数据表类型
2、事务的ACID原则
-
原子性(A) 组sql语句是当做一个整体执行的,不能单独执行其中的某一条,要么全部成功,要么全部失败 -
一致性(C) 要么都是事务提交前的状态,要么都是事务提交以后的状态,不可能存在事务在中间的什么状态 -
隔离性(I) 每一个事务处理之间互不影响,彼此独立和透明,事务间不能交叉 -
持久性(D) 事务一旦提交成功,对事务的影响是永久 的
3、mysql事务实现方法
- 代码示例:
- #使用事务模拟实现转账
- CREATE TABLE IF NOT EXISTS account(
- id INT(4) PRIMARY KEY AUTO_INCREMENT,
- `name` VARCHAR(32) NOT NULL,
- cash DECIMAL(9,2) NOT NULL
- );
- INSERT INTO account (`name`,cash)
- VALUES ('A',2000),('B',10000);
- SELECT * FROM account;
- DELETE FROM account;
- #没有异常情况时候的事务
- SET autocommit=0;
- START TRANSACTION;
- UPDATE account SET cash=cash-500 WHERE `name`='A';
- UPDATE account SET cash=cash+500 WHERE `name`='B';
- COMMIT;
- SET autocommit=1;
- #有问题时候的事务用rollback撤销,回到事务开始最初的状态
- SET autocommit=0;
- START TRANSACTION;
- UPDATE account SET cash=cash-500 WHERE `name`='A';
- UPDATE account SET cash=cash+500 WHERE `name`='B';
- ROLLBACK;
- SET autocommit=1;
复制代码
七、MySql索引和视图
1、索引分类
主键索引 | 唯一索引 | 常规索引 | 全文索引 |
---|
primary key | unique | index | fulltext | 避免同一个表中某数据列的值重复 | | 不宜添加过多常规索引 | 只能英语myisam,并且只能是vachar、char、test类型 |
唯一索引和主键索引区别:
- 主键索引只有一个、唯一索引可以有多个
- 主键索引非空,唯一索引可以null
- 一个列上有很多索引,数据库会去选一个效率高的索引执行
2、添加索引 - #添加索引
- #方式一:在创建表申明列的时候添加上
- CREATE TABLE text1(
- id INT(3) PRIMARY KEY,
- testno VARCHAR(10) UNIQUE,
- c VARCHAR(50),
- d VARCHAR(20),
- e TEXT,
- INDEX `index_c`(c,d),
- FULLTEXT(e)
- )ENGINE MYISAM
- ***添加常规索引的时候,可以添加多个列为常规索引,写在前面的列有优先权,索引名字用``隔开,而不是逗号。
- #方式二,将所有列都申明完毕后再添加索引,统一添加索引
- CREATE TABLE text2(
- id INT(3) ,
- testno VARCHAR(10) ,
- c VARCHAR(50),
- d VARCHAR(20),
- e TEXT,
- PRIMARY KEY(id),
- UNIQUE KEY(testno),
- INDEX `index_c`(c,d),
- FULLTEXT(e)
- )ENGINE MYISAM
- #方式三:创建表完毕后修改表的时候去添加索引
- CREATE TABLE text3(
- id INT(3) ,
- testno VARCHAR(10) ,
- c VARCHAR(50),
- d VARCHAR(20),
- e TEXT
- )ENGINE MYISAM
- ALTER TABLE text3 ADD PRIMARY KEY(id);
- ALTER TABLE text3 ADD UNIQUE KEY(testno);
- ALTER TABLE text3 ADD INDEX(c,d);
- ALTER TABLE text3 ADD FULLTEXT(e);
复制代码
3、显示索引信息
- 在目录index下可以看到
- 利用sql语句显示索引信息:SHOW INDEX FROM student;
4、删除索引 - 1、DROP INDEX 索引名 ON 表名;
- DROP INDEX testno ON text3;
- 2、ALTER TABLE 表名 DROP INDEX e索引名
- ALTER TABLE text3 DROP INDEX e;
- 3、#删除主键索引
- ALTER TABLE 表名 DROP PRIMARY KEY;
- ALTER TABLE text3 DROP PRIMARY KEY;
复制代码
5、复合索引
A-B-C先把A用到
6、索引准则
- 选择建立索引的列
- 频繁搜索的列
- 经常用作查询的列
- 经常排序、分组的列
- 经常用作连接的列(主键、外键)
- 不介意使用索引的列
- 仅包含几个不同值的列
- 小型表
7、视图
八、Mysql数据的备份与恢复
1、使用命令mysqldump备份 - mysqldump是和mysql同级的一个命令!
- 备份整个数据库
- mysqldump -uroot -p school>E:/java/beifen/school.sql
- 执行备份:
- *密码可以先不P输出,最后以密码文的形式
- *>千万别丢了,如果丢了,会报mysqldump couldnot find。。。。
- 备份特定的表
- mysqldump -uroot -p school grade student >E:/java/beifen/school1.sql
- mysqldump设置之指定哪些语句不显示
- mysqldump -uroot -p --skip-add-drop-table school grade student >E:/java/beifen/school2.sql
- mysqldump设置之显示insert into加上列名
- 加上一个-c即可
- mysqldump -uroot -p --skip-add-drop-table -c school grade student >E:/java/beifen/school2.sql
- 备份文件解析:
- 1、/*和*/包裹的数据代表是可以被mysql执行的注释,但是不能被其他数据库执行
- 2、--包围的是注释
- 3、 !40101是版本号
- **mysql --help|more会以一屏显示,一行一行的看
复制代码
2、使用mysql底下的脚本source - 1、进入mysql
- mysql -urrot -p
- 2、选择要备份到哪里
- use test
- 3、选择要备份的数据库
- source E:/java/beifen/school.sql
复制代码
3、使用sqlyong工具备份
注意点:1、打勾的时候一定要注意,不要勾选use database和carat database
4、用sql命令进行备份数据 - #将school库中的student表中的学号和姓名这两列备份出去
- USE school;
- #注意:备份出去的文件不可以提前存在
- SELECT studentno,StudentName INTO OUTFILE 'E:/java/beifen/student.sql' FROM student;
- #将备份出去的数据导入到test库中的stable表里来
- USE test;
- CREATE TABLE stable(
- id INT(4),
- sname VARCHAR(20)
- )
- LOAD DATA INFILE 'E:/java/beifen/student.sql' INTO TABLE stable(id,sname);
- SELECT * FROM stable;
复制代码
九、数据库设计
1、设计目的
- 效率高
- 节省数据的储存空间
- 便于进一步扩展
- 使应用程序的开发变得更容易
2、设计数据库的步骤
3、绘制E-R图
矩形表示实体、椭圆表示属性、菱形表示关系
4、绘制数据库模型图
用Visio2007版本及以下版本绘制更好
5、三大范式
十、JDBC连接数据库
1、JDBC概念
JDBC是实现java程序对各种数据库的访问,是一组类和接口,位于java.sql与javax.sql包
2、通过JDBC连接数据库 - //1、加载驱动
- Class.forName("com.mysql.jdbc.Driver");
- //2、建立连接
- String url="jdbc:mysql://localhost:3306/myschool";
- String user ="root" ;
- String password = "aaaaa123";
- con= DriverManager.getConnection(url, user, password);
- //创建sql语句
- String sql ="SELECT studentno,studentName FROM student";
- //创建对象
- pstm =con.prepareStatement(sql);
- //执行sql语句
- rs=pstm.executeQuery();
- //处理结果
- System.out.println("编号:\t姓名:");
- while(rs.next()) {
- System.out.println(rs.getInt("studentno")+"\t"+rs.getString("studentName"));
- }
- //关闭资源
- rs.close();
- pstm.close();
- con.close();
复制代码
Class.forName() 后加载 反射,事先不知道加载哪个类,运行时进行加载(桥接) 而Student stu =new Student() 先加载类
3、使用JDBC操作数据库(增删改查) - //增加数据
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Timestamp;
- public class Test3 {
- public static void main(String[] args) {
- ResultSet rs =null;
- PreparedStatement pstm=null;
- Connection con =null;
- //1、加载驱动
- try {
- Class.forName("com.mysql.jdbc.Driver");
- //2、建立连接
- String url="jdbc:mysql://localhost:3306/kgcnews";
- String user ="root" ;
- String password = "aaaaa123";
- con= DriverManager.getConnection(url, user, password);
- //创建sql语句
- String sql ="INSERT INTO news_category (NAME,createDate) VALUES (?,?)";
- //创建对象
- pstm =con.prepareStatement(sql);
- //给占位符赋值
- pstm.setString(1, "哈哈");
- pstm.setTimestamp(2, new Timestamp(10));
- //执行sql语句
- int i=pstm.executeUpdate();
- //处理结果
- if(i>=1) {
- System.out.println("增加成功");
- }else {
- System.out.println("未增加");
- }
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }finally {
- if(null !=pstm) {
- try {
- pstm.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if(null !=con) {
- try {
- con.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
复制代码
增删改操作类似,只是替换sql语句即可
十一、思维导图
1、更改
2、全景
十二、Readme
本文章已同步至我的GitHub仓库:Javastudy,期待您的加入?
本文章已同步至苍何的个人博客,可以直接在博客上留言哦?
来我的微信公众号玩耍呗?
扫码无套路关注我的CSDN博客?
|