day06 mysql加强

数据的备份(不用登录mysql):

       导出:mysqldump u用户名 p密码 数据库名>生成的脚本文件路径;

                demo:

                            mysqldump -uroot -proot test1>e:/chuanzhi/note/da1.sql

       导入(数据库必须有):mysql -u用户名 -p用户名 数据库<要导入的数据库的脚本路径

                demo: 

         mysql -uroot -proot test1<e:/chuanzhi/note/da1.sql

   注意:数据在哪边,口就朝向哪边。

自增auto_increment:

        注意:

                (1)该字段必须是数值类型

                (2)该字段必须是主键

                demo: 

                        create table users(id int primary key auto_increment,username varchar(32));

插入数据:

    (1)insert into users values(1,'zhangsan');

    (2)insert into users values('lisi');

    (3)insert into users (username)values('wangwu');

视图工具(SQLyog)

             导入数据:

                           如果原始的数据库和将要导入的数据库不一致时,不会导入成功。

                    解决办法:

                            删除原始库中的这一行:

                                        use 库名;

外键(foreign key

    作用:保证了数据的完整性。

创建外键

             create table cars(id int primary key auto_increment,name varchar(32),uid   int,foreign key(uid) references users(id));

 笛卡尔积(错误的历史问题)

    SELECT username,carname FROM users,cars;


查询:

条件查询:

    select u.username,c.name from users u,cars c where c.uid=u.id;

内连接查询:

       Inner join on

                select u.username,c.name from users u inner join cars c on c.uid=u.id;(和上述条件查询一样的结果)

左外连接查询:

       Left join on

                 select u.username,c.name from users u left join cars c on c.uid=u.id;

右外连接查询:

       Right join on

                select u.username,c.name from users u right join cars c on c.uid=u.id;

区别:

         左连接以左边的表为主表,左边为空的数据会显示出来。

         反过来一样。

 多表:

            书写格式:

                    select  字段  from  表名  连接方式(内左右) 表名  on  条件

             连接方式(内左右) 表名  on  条件

                 ........

自连接查询:

       当作两个表,取的别名不一样即可

         demo:

                     select e.employee,m.employee from emply e,emply m where e.manager=m.employid;

事务:

       Start transation

       Commit

       Rollback

(commit提交之后回滚不了)

一对一: 

        例子:主表  Person   (id  name)

                  子表   身份证号   (id)

                  子表的:主键又是外键                    

多对多(中间加一个表,转换成多个一对多):

例子(学生选课):

--  学生表

CREATE  TABLE  students(

  

   id INT PRIMARY KEY,

   username VARCHAR(32)


);

-- 课程表


CREATE TABLE course(

  id  INT PRIMARY KEY,

  cname VARCHAR(32)


);


--  中间表


CREATE  TABLE  sc(

   

    sid INT,

    cid INT ,

    PRIMARY  KEY(sid,cid),

    FOREIGN KEY (sid) REFERENCES students (id),

    FOREIGN KEY (cid) REFERENCES course (id)


)


--  插入student数据


INSERT INTO  students VALUES(1,'zhangsan');

INSERT INTO  students VALUES(2,'lisi');

INSERT INTO  students VALUES(3,'lili');


-- 插入课程


INSERT INTO  course  VALUES (1,'java');

INSERT INTO  course  VALUES (2,'php');

INSERT INTO  course  VALUES (3,'ios');


--  选课


INSERT INTO  sc VALUES (1,3);

INSERT INTO  sc VALUES (2,1);

INSERT INTO  sc VALUES (3,2);



--  某人选择某课 


SELECT  username,cname FROM students s INNER JOIN  sc ON s.id = sc.sid

                                       INNER JOIN  course c ON  sc.cid = c.id;  

                                       

SELECT  username,cname FROM students s LEFT JOIN  sc ON s.id = sc.sid  

                                       LEFT JOIN  course c ON  sc.cid = c.id ;  


SELECT username,cname FROM  students s RIGHT JOIN  sc ON  s.id = sc.sid

                                      RIGHT JOIN   course c ON sc.cid = c.id                                  



捐助共勉
版权声明:若无特殊注明,本文皆为原创,转载请保留文章出处。