LOFTER for ipad —— 让兴趣,更有趣

点击下载 关闭

LOFTER-网易轻博

学习笔记

18808浏览    2168参与
树丫生活

6.1儿童节

01

给孩子全世界最好的礼物,

不如给孩子全世界。

看过世界的孩子更强大

——Jeep


02

过期的光阴

不过期的童趣


03

童年有趣,成年有酒。

——泸州老窖


04

爱,每天都需要快递

——德邦快递


05

孩子眼中的快乐,没有价格。

——蜜芽


06

离开,你变成外乡的大人

归来,你变回故乡的孩子

——微信红包


07

成长是学会把岁月的风霜

变成梳妆台上的眼霜

——美图秀秀


08

长大成仁,依旧新鲜

——恰恰


09

小时候跳房子需要9步,

长大后装房子只要1步。

——土巴兔


10

梦想有了...

01

给孩子全世界最好的礼物,

不如给孩子全世界。

看过世界的孩子更强大

——Jeep


02

过期的光阴

不过期的童趣


03

童年有趣,成年有酒。

——泸州老窖


04

爱,每天都需要快递

——德邦快递



05

孩子眼中的快乐,没有价格。

——蜜芽


06

离开,你变成外乡的大人

归来,你变回故乡的孩子

——微信红包


07

成长是学会把岁月的风霜

变成梳妆台上的眼霜

——美图秀秀


08

长大成仁,依旧新鲜

——恰恰


09

小时候跳房子需要9步,

长大后装房子只要1步。

——土巴兔


10

梦想有了营养的支撑,

就会长出希望的翅膀。

——蒙牛



11

够“吃心”,才能品尝世界。

——百草味


12

大小不同,追求相同

——意尔康


13

我们并没有长大,只是玩具变了

——红米手机


14

你因好奇而勇敢

我因有你而无畏


你认真细数繁星

我做你的启明星


你想要一个乐园

我想给你全世界

——林肯中国


15

我们怀念的不只是糖果的味道

还有未泯的童心

——东风雷诺


16

想象力,是你的超能力。

——雄狮文具


17

手机刷屏关注天下事,

不如猜猜宝宝的小心事。

——OPPO


18

童年很宝贵,

童年的快乐并不贵。

——卷皮网


19

动画片可以回放,

但童年无法重来。

——华数机顶盒


20

纯“帧”的每一刻,幸福的“慢动作”

——一加手机


21

遇见真爱

我们就成了幼稚的孩子

——珍爱网


22

不改的是玩心,

不变的是专注。

——长安铃木


23

在学步车里,

第一次感受到驾驶的乐趣。

——奥迪


24

我们不能留住童年,

但我们可以保持童颜。

——百雀羚


25

童心,是比野心更难得的梦想加速器。

——慕思床垫

陈垆
整得没有一点认真程度的思维导图...

整得没有一点认真程度的思维导图(喂)

总之我完成了(大声逼逼)

整得没有一点认真程度的思维导图(喂)

总之我完成了(大声逼逼)

一个胖团子啊

八年级下册译林版U 7reading 知识点


八年级下册译林版U 7reading 知识点




yamx

super()的查找顺序(super方法调用的不一定是父类的属性)

1、通常来说,调用子类一旦调用了super(),就表示调用了父类的某个属性或方法:

class A:

    def test(self):

        print('from A')


class B(A):

    def test(self):

        super().test()


obj = B()

obj.test()

# 输出内容:

#...

1、通常来说,调用子类一旦调用了super(),就表示调用了父类的某个属性或方法:

class A:

    def test(self):

        print('from A')


class B(A):

    def test(self):

        super().test()


obj = B()

obj.test()

# 输出内容:

# from A


2、其实调用super()后具体调用了哪个类下的属性和方法,是根据调用方(对象或者类)类的mro列表来查找的:

class A:
    def test(self):
        super().test()

class B:
    def test(self):
        print('from B')


class C(A, B):
    pass

print(C.mro())
obj = C()
obj.test()

# 输出内容:
# [<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
# from B

分析:

    ABC三个类中,其中A和B并没有继承关系,C分别继承了这两个类。

    C的实例化对象调用test方法时,根据mro列表,在C中没有找到;

    在A中找了test方法,A类却调用了super()方法,此时A类的父类是object,没有其他父类;

    还是根据mro列表,找到了B类中的test方法 ,输出结果


总结:super()方法调用的不一定就是父类的属性

yamx

元类练习三

# 4、在元类中控制自定义的类产生的对象相关的属性全部为隐藏属性

class Mymeta4(type):

    def __call__(self, *args, **kwargs):

        obj = self.__new__(self)

        self.__init__(obj, *args, **kwargs)...


# 4、在元类中控制自定义的类产生的对象相关的属性全部为隐藏属性

class Mymeta4(type):

    def __call__(self, *args, **kwargs):

        obj = self.__new__(self)

        self.__init__(obj, *args, **kwargs)

        print('修改前:', obj.__dict__)

        #  隐藏属性的命名: _类名__属性名

        start_str = '_' + self.__name__ + '__'

        print(start_str)

        update_dic = {}

        for k, v in obj.__dict__.items():

            if not k.startswith(start_str):

                update_key = start_str + k

                update_dic[update_key] = v

            else:

                update_dic[k] = v

        obj.__dict__ = update_dic

        print('修改后:', obj.__dict__)

        return obj



class Test(metaclass=Mymeta4):

    def __init__(self, name, age):

        self.name = name

        self.age = age



obj = Test('test', 18)

print(obj.__dict__)



# 输出内容:

# 修改前: {'name': 'test', 'age': 18}

# _Test__

# 修改后: {'_Test__name': 'test', '_Test__age': 18}

# {'_Test__name': 'test', '_Test__age': 18}


林角崖尾

  最近真的太累了。

  每天早上一睁眼就是满脑子的deadline,晚上睡觉梦里也是论文交晚了得零分,要不就是系统崩溃死活交不上。


  p2是上周的任务,有两项没做完顺延到这一周,这一周目前必要完成的有3篇论文2个案例统计分析1个ppt还有码字3000+。

  死线全部是6月1日之前。

  我刚才握着拳头数“一月大二月平三月大……”算出来5月有31天的时候真的松了一口气。

  虽然也只是多出来一天。


  希望一切顺利。


  最近真的太累了。

  每天早上一睁眼就是满脑子的deadline,晚上睡觉梦里也是论文交晚了得零分,要不就是系统崩溃死活交不上。


  p2是上周的任务,有两项没做完顺延到这一周,这一周目前必要完成的有3篇论文2个案例统计分析1个ppt还有码字3000+。

  死线全部是6月1日之前。

  我刚才握着拳头数“一月大二月平三月大……”算出来5月有31天的时候真的松了一口气。

  虽然也只是多出来一天。


  希望一切顺利。



yamx

元类练习二

# 3、在元类中控制自定义的类无需__init__方法

# 1.元类帮其完成创建对象,以及初始化操作;

# 2.要求实例化时传参必须为关键字形式,否则抛出异常TypeError: must use keyword argument

# 3.key作为用户自定义类产生对象的属性,且所有属性变成大写

class Mymeta3(type):

    def __call__(self, *args, **kwargs):

        # *...

# 3、在元类中控制自定义的类无需__init__方法

# 1.元类帮其完成创建对象,以及初始化操作;

# 2.要求实例化时传参必须为关键字形式,否则抛出异常TypeError: must use keyword argument

# 3.key作为用户自定义类产生对象的属性,且所有属性变成大写

class Mymeta3(type):

    def __call__(self, *args, **kwargs):

        # *args接收位置参数

        # **kwargs接收关键字参数

        # 通过判断这两个可变长的参数是否有值,即可判断是否通过关键字传参


        if not kwargs or args:

            # 关键字参数为空或位置参数元组有值,抛出异常

            raise TypeError('must use keyword argument')

        print(args)

        print(kwargs)

        # 调用new生成空对象

        obj = self.__new__(self)


        # 调用init初始化对象

        self.__init__(obj)


        print('将key全部变成大写之前:', obj.__dict__)

        # key作为用户自定义类产生对象的属性,且所有属性变成大写

        for key, value in kwargs.items():

            # key不是全大写,将key大写化加入字典

            if not key.isupper():

                upper_key = key.upper()

                obj.__dict__[upper_key] = value

            # key全大写,直接加入字典

            else:

                obj.__dict__[key] = value


        print('将key全部变成大写后:', obj.__dict__)

        return obj


class Foo(metaclass=Mymeta3):

    pass


obj = Foo(name='admin', AGe=18, GENDER='male')

print(obj.__dict__)


# 输出内容:

# ()

# {'name': 'admin', 'AGe': 18, 'GENDER': 'male'}

# 将key全部变成大写之前: {}

# 将key全部变成大写后: {'NAME': 'admin', 'AGE': 18, 'GENDER': 'male'}

# {'NAME': 'admin', 'AGE': 18, 'GENDER': 'male'}


yamx

元类练习一

# 1、在元类中控制把自定义类的数据属性都变成大写

class Mymeta1(type):

    def __new__(cls, name, bases, attrs):

        print(attrs)

        update_attrs_dict = {}

        for key, value in attrs...

# 1、在元类中控制把自定义类的数据属性都变成大写

class Mymeta1(type):

    def __new__(cls, name, bases, attrs):

        print(attrs)

        update_attrs_dict = {}

        for key, value in attrs.items():

            if not callable(value) and not key.startswith('__') and not key.isupper():

                upper_key = key.upper()

                update_attrs_dict[upper_key] = value

            else:

                update_attrs_dict[key] = value

        return type.__new__(cls, name, bases, update_attrs_dict)



class People(metaclass=Mymeta1):

    name = '111'

    age = 18


    def foo(self):

        pass



print(People.__dict__)



# 输出内容:

# {'__module__': '__main__', '__qualname__': 'People', 'name': '111', 'age': 18, 'foo': <function People.foo at 0x0000023DE14F5598>}

# {'__module__': '__main__', 'NAME': '111', 'AGE': 18, 'foo': <function People.foo at 0x0000023DE14F5598>, '__dict__': <attribute '__dict__' of 'People' objects>, ......}


# 2、 控制自定义类生成的对象中数据属性都变成大写

# 调用类产生对象的三个过程:

# 一个对象能被调用,说明该对象或该类的元类中有__call__

# 1、调用时会执行__call__

# 2、然后依次执行__new__方法(优先执行改写过得new方法,如果没有就执行object的new方法),生成空对象

# 3、接着执行__init__方法(优先执行改写过的init方法,如果没有就执行object的init方法),完成对象初始化

# 4、最后返回该对象

class Mymeta2(type):

    # 1

    def __call__(self, *args, **kwargs):

        # 2

        obj = self.__new__(self)

        # 3

        self.__init__(obj, *args, **kwargs)

        # -------------定制化过程---------

        print('修改前:', obj.__dict__)

        updated_dict = {}

        for key, value in obj.__dict__.items():

            if not key.isupper():

                updated_key = key.upper()

                updated_dict[updated_key] = value

        obj.__dict__ = updated_dict

        print('修改后:', obj.__dict__)

        # ------------------------------

        # 4

        return obj



class Animal(metaclass=Mymeta2):

    def __init__(self, name, gender):

        self.name = name

        self.gender = gender


    def say(self):

        print('动物的叫声')



obj = Animal('cat', 'male')

print(obj.__dict__)


# 输出内容:

# 修改前: {'name': 'cat', 'gender': 'male'}

# 修改后: {'NAME': 'cat', 'GENDER': 'male'}

# {'NAME': 'cat', 'GENDER': 'male'}


一个胖团子啊

语文八年级下册人教版

《礼记》二则

《虽有佳肴》《大道之行也》板书


ps:字有点潦草

语文八年级下册人教版

《礼记》二则

《虽有佳肴》《大道之行也》板书


ps:字有点潦草

亭曈

初一历史第十三课

是我的像素太差,还是我手抖呢Ծ‸Ծ?感觉有一点点模糊…………

初一历史第十三课

是我的像素太差,还是我手抖呢Ծ‸Ծ?感觉有一点点模糊…………

亭曈

初一历史第十二课

这一课的笔记好少*罒▽罒*P55没有笔记,所以没拍~

初一历史第十二课

这一课的笔记好少*罒▽罒*P55没有笔记,所以没拍~

亭曈
学习讨论群 大家可以在里面讨论...

学习讨论群

大家可以在里面讨论学习,分享资料~

年龄不限群里大部分是初一初二的,小朋友也可以来哦(´-ω-`)

(占tag致歉)

学习讨论群

大家可以在里面讨论学习,分享资料~

年龄不限群里大部分是初一初二的,小朋友也可以来哦(´-ω-`)

(占tag致歉)

yamx

元类下的属性查找

类与类间有这么一个关系:

class Mymeta(type):

    n = 1


class A:

    n = 2


class B(A, metaclass=Mymeta):

    n = 3

1、查找属性的调用方是对象

obj = B()

print(obj.n)

    obj首先从自身名称空间查找,无果则去obj的基类(B类)的名称空间查找,n=3; 若B类中也没有n,则去A类中找;A类也没有则报错

  ...

类与类间有这么一个关系:

class Mymeta(type):

    n = 1


class A:

    n = 2


class B(A, metaclass=Mymeta):

    n = 3

1、查找属性的调用方是对象

obj = B()

print(obj.n)

    obj首先从自身名称空间查找,无果则去obj的基类(B类)的名称空间查找,n=3; 若B类中也没有n,则去A类中找;A类也没有则报错

    对象的属性查找顺序:对象本身-->基类-->父类-->object类,不会查到元类上


2、查找属性的调用方是类

print(B.n)

    B类首先从自身查找,无果则去父类中找,最后元类中找

yamx

定制元类来控制类的产生之__call__

引入

# 如果要让一个对象可以加括号调用,需要在该对象的类中添加一个方法__call__

例如:

class People:

    def __init__(self, name, age):

        self.name = name

        self.age = age


obj = People('zs', 18)

obj()

# 报错:TypeError: ...

引入

# 如果要让一个对象可以加括号调用,需要在该对象的类中添加一个方法__call__

例如:

class People:

    def __init__(self, name, age):

        self.name = name

        self.age = age


obj = People('zs', 18)

obj()

# 报错:TypeError: 'People' object is not callable  (People对象不可调用)

    此时,people类内部并没有__call__方法,所以无法调用obj。


往People内部加一个__call__方法:

class People:

    def __init__(self, name, age):

        self.name = name

        self.age = age


    def __call__(self, *args, **kwargs):

        print("这是call")

        return 111



obj = People('zs', 18)

res = obj()

print(res)


# 这是call

# 111

    这就实现了开头的需求。


__call__在定制元类中的作用:

# 调用元类产生类会发生的三件事:(与调用类产生对象的步骤一致)
# 1、先生成一个空对象----------调用__new__方法生成的对象
# 2、调用元类下的__init__方法,完成初始化对象的操作
# 3、返回一个初始化好的对象

    实际上,调用类产生对象发生的三件事,就是__call__方法在起作用。一个类既然能被调用就说明该类的元类内部实现了__call__方法。

    而这三件事(也可以称为三个步骤)就是在__call__方法内依次实现的:

#案例:

调用类产生对象的完整过程 :

    对象是People类调用__call__()生成的,__call__是People类的元类控制的

class Mymeta(type):

    def __call__(self, *args, **kwargs):

        """

        self : 调用者本身(People类)

        :param args: 调用对象时传入的参数

        :param kwargs: 调用对象时传入的参数

        :return: 初始化后的对象

        """

        # 先生成一个空对象---- __new__方法(如果调用者本身没有改写new方法,调用的就是默认的new)

        people_obj = self.__new__(self)

        # 完成对象初始化---- __init__方法

        self.__init__(people_obj, *args, **kwargs)

        # 返回初始化后的对象----

        return people_obj



class People(metaclass=Mymeta):

    def __init__(self, name, age):

        self.name = name

        self.age = age


obj = People('zs', 18)

print(obj.__dict__)


总结:

1、__call__方法控制的是,类产生对象的过程,可以在调用过程中做一些定制化操作;

2、一个对象是否能够调用,取决于它的类或元类是否有__call__方法;

3、类的定制化,需要元类的内部对__new__或__init__方法定制化,最终是通过元类的元类(也就内置元类type)的__call__方法来调用生成类。


yamx

定制元类来控制类的产生之__new__

# 调用元类产生类会发生的三件事:(与调用类产生对象的步骤一致)
# 1、先生成一个空对象(调用__new__方法生成的对象

# 2、调用元类下的__init__方法,完成初始化对象的操作

# 3、返回一个初始化好的对象

    __new__方法是在__init__之前就被调用的,__new__方法默认是生成带有当前类的基本属性的对象:

    def __new__(cls, *args, **kwargs):
       ...

# 调用元类产生类会发生的三件事:(与调用类产生对象的步骤一致)
# 1、先生成一个空对象(调用__new__方法生成的对象

# 2、调用元类下的__init__方法,完成初始化对象的操作

# 3、返回一个初始化好的对象

    __new__方法是在__init__之前就被调用的,__new__方法默认是生成带有当前类的基本属性的对象:

    def __new__(cls, *args, **kwargs):
            return type.__new__(cls, *args, **kwargs)

    只有通过__new__方法生成了对象后,才会进一步调用__init__方法。因为__init__方法需要以self参数(也就是一个对象)。


验证如下:

class Mymeta(type):

    def __init__(self, class_name, class_bases, class_dic):

        print("init方法")


    def __new__(cls, *args, **kwargs):

        print("new方法")

        print(cls)
        print(args)
        print(kwargs)


class Test(metaclass=Mymeta):

    pass


# 输出结果:

# new方法

# <class '__main__.Mymeta'>

# ('Test', (), {'__module__': '__main__', '__qualname__': 'Test'})

# {}

    因为__new__方法并没有返回一个对象,所以无法继续调用__init__方法,也就无法通过该类(元类)产生一个对象(类),此时通过Test实例化会报错  :   TypeError: 'NoneType' object is not callable


将__new__方法改写:

def __new__(cls, *args, **kwargs):

        print("new方法")

        return type.__new__(cls, *args, **kwargs)


# 此时输出:

# new方法

# init方法


树丫生活

说给爱情听

无论如何 保持浪漫


保持浪漫是情侣对彼此也是对自己的要求

这个买花文案则抓住了这一点

暗示大家应该买一束花送给爱人或自己

而且花本身就是浪漫的象征

两者结合 感觉不言而喻


 02 


生命周而复始又乏味之至

而只有当你觉得它可爱时

它才会变得可爱如斯


你看到的世界是什么样的

那世界就是什么样的

这句文案就是这句话的第二种表达

 03 


要永远记住

你的新衣服

是用来讨好自己的

你的人生也是


这句文案读起来就很能产生共鸣

每个人的人生都是自己的

不用为了讨好别人而活


 ...

无论如何 保持浪漫


保持浪漫是情侣对彼此也是对自己的要求

这个买花文案则抓住了这一点

暗示大家应该买一束花送给爱人或自己

而且花本身就是浪漫的象征

两者结合 感觉不言而喻


 02 


生命周而复始又乏味之至

而只有当你觉得它可爱时

它才会变得可爱如斯


你看到的世界是什么样的

那世界就是什么样的

这句文案就是这句话的第二种表达

 03 


要永远记住

你的新衣服

是用来讨好自己的

你的人生也是


这句文案读起来就很能产生共鸣

每个人的人生都是自己的

不用为了讨好别人而活


 04 


今天努力打拼和付出

为将来每天在海边看日出

每一个早起的你都
可歌可颂


这句文案来自KFC

它为今天的努力打拼预设了一个想象场景

今天的努力是为了明天更好的未来

让人更能够欣然接受辛苦的今天

而可歌可颂则刚好和产品可颂相呼应



 05 


好不容易上了岸

就不要再想海里的事情了


女王在这句文案里

看到了一句安慰但更像自我的独白

是分手后的放不下

是分手后的始终爱着


 06 


我的脑袋是个小小星球

每天只有你

开着月亮列车巡游



女王总是对这种可爱文案没有任何抵抗力

把满脑子都是喜欢的人诠释的很舒服

俏皮又可爱

 07 


温柔是尊重


短短五个字给温柔一个定义

温柔不是说话细声细语

温柔是对世界的善意

对生活、对他人、对自己都保有尊重

温柔是一种力量


 08 


人生

说长也很长,说短也很短

对自己好点,那才是真理


人生的确既长又短

没有人能够预见自己的人生

能做的就是活在当下


 09 


你把城墙垒的很高

又希望有人能够不惧艰辛

越过城墙来爱你不是吗


在这句文案里我看到了很多人的影子

有些人把自己包裹得很严实

没有给出任何的机会

却想要有人能够拥抱他


 10 


女孩子总在细节中红了脸也红了眼


红了脸也红了眼

将女生容易被细节打动

也容易被细节所伤完美诠释


 11 


-爸爸,为什么小孩子不应该喝酒

-因为,小孩子不喝酒也很开心啊


看到这个我想起《爸爸去哪儿》
嗯哼问杜江炒鸡蛋,鸡蛋痛吗?
杜江说:被可爱的小朋友吃掉就不痛。“
虽然含义不同但我觉得有异曲同工之感
可爱的回答能够保护孩子的童心
当然在这句文案中我们更多看到的是
成年人的借酒消愁


 12 


无数渺小的思考填满了人的一生


 13 


本来想2019年咸鱼翻身

没想到粘锅了

多少年过去了

我们唯一不变的

还是那颗想发财的心


不知道你们看完什么感觉

反正官官也是2020年了

我唯一不变的

是那颗发财的心


 14 


苦难总会终结

坚强之人永存


 15 


这个时代一定是哪里出错了

才会让人觉得喝茶是中年人的事


 16 


快乐的事

正在排队呢


 17 


和任何一种生活

摩擦久了都会起球


 18 


美好的事物无法久存



 19 


你困住我  年深月久


 20 


即时退出

当代生活


 21 


人生除了生死

其他都是擦伤



 22 


我感激

遇到你的那一天


 23 


你必须生活在今天


 24 


可以做艺术

但是没必要


 25 


成年人世界没有童话

好聚好散如此便罢


 26 


被你安稳地爱着

应该会有做任何事的勇气

 27 

 

我们都是戏子

在别人的故事里

流着自己的眼泪


 28


青青的野葡萄

淡黄的小月亮

妈妈发愁了

怎么做果酱


我说:

别加糖

在早晨的篱笆上

有一枚甜甜的

红太阳


 29


不要总在过去的回忆里缠绵

因为昨天的太阳

晒不干今天的衣裳


为了佐证不要在回忆里纠缠

举了昨天的太阳晒不干今天的衣服这一例子

更好地让人理解

在回忆里走不出来其实对自己毫无帮助




卢大蒜

MySQL基础常用语句

数据库

# 查看所有的数据库

SHOW DATABASES ;

# 创建一个数据库

CREATE DATABASE k;

# 删除一个数据库

DROP DATABASE k;

# 使用这个数据库

USE k;


# 查看所有的表

SHOW TABLES ;

# 创建一个表

CREATE TABLE n(id INT, name VARCHAR(10));

CREATE TABLE m(id INT, name VARCHAR(10), PRIMARY KEY (id), FOREIGN KEY...

数据库

# 查看所有的数据库

SHOW DATABASES ;

# 创建一个数据库

CREATE DATABASE k;

# 删除一个数据库

DROP DATABASE k;

# 使用这个数据库

USE k;

 

# 查看所有的表

SHOW TABLES ;

# 创建一个表

CREATE TABLE n(id INT, name VARCHAR(10));

CREATE TABLE m(id INT, name VARCHAR(10), PRIMARY KEY (id), FOREIGN KEY (id) REFERENCES n(id), UNIQUE (name));

CREATE TABLE m(id INT, name VARCHAR(10));

# 直接将查询结果导入或复制到新创建的表

CREATE TABLE n SELECT * FROM m;

# 新创建的表与一个存在的表的数据结构类似

CREATE TABLE m LIKE n;

# 创建一个临时表

# 临时表将在你连接MySQL期间存在。当断开连接时,MySQL将自动删除表并释放所用的空间。也可手动删除。

CREATE TEMPORARY TABLE l(id INT, name VARCHAR(10));

# 直接将查询结果导入或复制到新创建的临时表

CREATE TEMPORARY TABLE tt SELECT * FROM n;

# 删除一个存在表

DROP TABLE IF EXISTS m;

# 更改存在表的名称

ALTER TABLE n RENAME m;

RENAME TABLE n TO m;

# 查看表的结构(以下五条语句效果相同)

DESCn;   # 因为简单,所以建议使用

DESCRIBE n;

SHOW COLUMNS IN n;

SHOW COLUMNS FROM n;

EXPLAIN n;

# 查看表的创建语句

SHOW CREATE TABLE n;

 

表的结构

# 添加字段

ALTER TABLE n ADD age VARCHAR(2) ;

# 删除字段

ALTER TABLE n DROP age;

# 更改字段属性和属性

ALTER TABLE n CHANGE agea INT;

# 只更改字段属性

ALTER TABLE n MODIFY age VARCHAR(7) ;

 

表的数据

# 增加数据

INSERT INTO n VALUES (1, 'tom', '23'), (2, 'john', '22');

INSERT INTO n SELECT * FROM n;  # 把数据复制一遍重新插入

# 删除数据

DELETE FROM n WHERE id = 2;

# 更改数据

UPDATE n SET name = 'tom' WHERE id = 2;

# 数据查找

SELECT * FROM n WHERE name LIKE '%h%';

# 数据排序(反序)

SELECT * FROM n ORDER BY name, id DESC ;

 

# 添加主键

ALTER TABLE n ADD PRIMARY KEY (id);

ALTER TABLE n ADD CONSTRAINT pk_nPRIMARY KEY (id);   # 主键只有一个,所以定义键名似乎也没有什么用

# 删除主键

ALTER TABLE n DROP PRIMARY KEY ;

# 添加外键

ALTER TABLE m ADD FOREIGN KEY (id) REFERENCES n(id);    # 自动生成键名m_ibfk_1

ALTER TABLE m ADD CONSTRAINTfk_id FOREIGN KEY (id) REFERENCES n(id);   # 使用定义的键名fk_id

# 删除外键

ALTER TABLE m DROP FOREIGN KEY `fk_id`;

# 修改外键

ALTER TABLE m DROP FOREIGN KEY `fk_id`, ADD CONSTRAINTfk_id2 FOREIGN KEY (id) REFERENCES n(id);    # 删除之后从新建

# 添加唯一键

ALTER TABLE n ADD UNIQUE (name);

ALTER TABLE n ADD UNIQUEu_name (name);

ALTER TABLE n ADD UNIQUE INDEXu_name (name);

ALTER TABLE n ADD CONSTRAINTu_name UNIQUE (name);

CREATE UNIQUE INDEXu_name ON n(name);

# 添加索引

ALTER TABLE n ADD INDEX (age);

ALTER TABLE n ADD INDEXi_age (age);

CREATE INDEXi_age ON n(age);

# 删除索引或唯一键

DROP INDEXu_name ON n;

DROP INDEXi_age ON n;

 

视图

# 创建视图

CREATE VIEW v AS SELECT id, name FROM n;

CREATE VIEW v(id, name) AS SELECT id, name FROM n;

# 查看视图(与表操作类似)

SELECT * FROM v;

DESCv;

# 查看创建视图语句

SHOW CREATE VIEW v;

# 更改视图

CREATE OR REPLACE VIEW v AS SELECT name, ageFROM n;

ALTER VIEW v AS SELECT name FROM n ;

# 删除视图

DROP VIEW IF EXISTS v;

 

联接


# 内联接

SELECT * FROM m INNER JOIN n ON m.id= n.id;

# 左外联接

SELECT * FROM m LEFT JOIN n ON m.id= n.id;

# 右外联接

SELECT * FROM m RIGHT JOIN n ON m.id= n.id;

# 交叉联接

SELECT * FROM m CROSS JOIN n;   # 标准写法

SELECT * FROM m,n;

# 类似全连接full join的联接用法

SELECT id,name FROM m

UNION

SELECT id,name FROM n;

 

函数

# 聚合函数

SELECT count(id) AS totalFROM n;  # 总数

SELECT sum(age)AS all_age FROM n;   # 总和

SELECT avg(age)AS all_age FROM n;   # 平均值

SELECT max(age)AS all_age FROM n;   # 最大值

SELECT min(age)AS all_age FROM n;   # 最小值

# 数学函数

SELECT abs(-5);   # 绝对值

SELECT bin(15), oct(15), hex(15);   # 二进制,八进制,十六进制

SELECT pi();   # 圆周率3.141593

SELECT ceil(5.5);   # 大于x的最小整数值6

SELECT floor(5.5);   # 小于x的最大整数值5

SELECT greatest(3,1,4,1,5,9,2,6);   # 返回集合中最大的值9

SELECT least(3,1,4,1,5,9,2,6);    # 返回集合中最小的值1

SELECT mod(5,3);    # 余数2

SELECT rand();    # 返回0到1内的随机值,每次不一样

SELECT rand(5);   # 提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。

SELECT round(1415.1415);   # 四舍五入1415

SELECT round(1415.1415, 3);   # 四舍五入三位数1415.142

SELECT round(1415.1415, -1);    # 四舍五入整数位数1420

SELECT truncate(1415.1415, 3);    # 截短为3位小数1415.141

SELECT truncate(1415.1415, -1);   # 截短为-1位小数1410

SELECT sign(-5);    # 符号的值负数-1

SELECT sign(5);    # 符号的值正数1

SELECT sqrt(9);   # 平方根3

SELECT sqrt(9);   # 平方根3

# 字符串函数

SELECT concat('a', 'p', 'p', 'le');   # 连接字符串-apple

SELECT concat_ws(',', 'a', 'p', 'p', 'le');   # 连接用','分割字符串-a,p,p,le

SELECT insert('chinese', 3, 2, 'IN');    # 将字符串'chinese'从3位置开始的2个字符替换为'IN'-chINese

SELECT left('chinese', 4);   # 返回字符串'chinese'左边的4个字符-chin

SELECT right('chinese', 3);   # 返回字符串'chinese'右边的3个字符-ese

SELECT substring('chinese', 3);   # 返回字符串'chinese'第三个字符之后的子字符串-inese

SELECT substring('chinese', -3);   # 返回字符串'chinese'倒数第三个字符之后的子字符串-ese

SELECT substring('chinese', 3, 2);   # 返回字符串'chinese'第三个字符之后的两个字符-in

SELECT trim('chinese ');    # 切割字符串' chinese '两边的空字符-'chinese'

SELECT ltrim('chinese ');    # 切割字符串' chinese '两边的空字符-'chinese '

SELECT rtrim('chinese ');    # 切割字符串' chinese '两边的空字符-' chinese'

SELECT repeat('boy', 3);    # 重复字符'boy'三次-'boyboyboy'

SELECT reverse('chinese');    # 反向排序-'esenihc'

SELECT length('chinese');   # 返回字符串的长度-7

SELECT upper('chINese'), lower('chINese');    # 大写小写 CHINESE    chinese

SELECT ucase('chINese'), lcase('chINese');    # 大写小写 CHINESE    chinese

SELECT position('i' IN 'chinese');    # 返回'i'在'chinese'的第一个位置-3

SELECT position('e' IN 'chinese');    # 返回'i'在'chinese'的第一个位置-5

SELECT strcmp('abc', 'abd');    # 比较字符串,第一个参数小于第二个返回负数- -1

SELECT strcmp('abc', 'abb');    # 比较字符串,第一个参数大于第二个返回正数- 1

# 时间函数

SELECT current_date, current_time, now();    # 2018-01-13   12:33:43   2018-01-13 12:33:43

SELECT hour(current_time), minute(current_time), second(current_time);    # 12 31   34

SELECT year(current_date), month(current_date), week(current_date);   # 2018   1   1

SELECT quarter(current_date);   # 1

SELECTmonthname(current_date), dayname(current_date);   # January Saturday

SELECT dayofweek(current_date), dayofmonth(current_date), dayofyear(current_date);    # 7  13  13

# 控制流函数

SELECT if(3>2, 't', 'f'), if(3<2, 't', 'f');    # t f

SELECT ifnull(NULL, 't'), ifnull(2, 't');    # t 2

SELECT isnull(1), isnull(1/0);    # 0 1 是null返回1,不是null返回0

SELECT nullif('a', 'a'), nullif('a', 'b');    # null a 参数相同或成立返回null,不同或不成立则返回第一个参数

SELECT CASE 2

       WHEN 1 THEN 'first'

       WHEN 2 THEN 'second'

       WHEN 3 THEN 'third'

       ELSE 'other'

       END;     # second

# 系统信息函数

SELECT database();    # 当前数据库名-test

SELECT connection_id();   # 当前用户id-306

SELECT user();    # 当前用户-root@localhost

SELECT version();   # 当前mysql版本

SELECT found_rows();    # 返回上次查询的检索行数

 

用户

# 增加用户

CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';

INSERT INTOmysql.user(Host, User, Password) VALUES ('localhost', 'test', Password('test'));    # 在用户表中插入用户信息,直接操作User表不推荐

# 删除用户

DROP USER 'test'@'localhost';

DELETE FROMmysql.user WHERE User='test' ANDHost='localhost';

FLUSH PRIVILEGES ;

# 更改用户密码

SET PASSWORD FOR 'test'@'localhost' = PASSWORD('test');

UPDATEmysql.user SET Password=Password('t') WHERE User='test' ANDHost='localhost';

FLUSH PRIVILEGES ;

# 用户授权

GRANT ALL PRIVILEGES ON *.* TO test@localhostIDENTIFIED BY 'test';

# 授予用'test'密码登陆成功的test@localhost用户操作所有数据库的所有表的所有的权限

FLUSH PRIVILEGES;   # 刷新系统权限表,使授予权限生效

# 撤销用户授权

REVOKE DELETE ON *.* FROM 'test'@'localhost';   # 取消该用户的删除权限

 

储存过程

# 创建存储过程

DELIMITER//    # 无参数

CREATE PROCEDURE getDates()

  BEGIN

    SELECT * FROM test ;

  END //

CREATE PROCEDURE getDates_2(IN idINT)    # in参数

  BEGIN

    SELECT * FROM test WHERE a = id;

  END //

CREATE PROCEDURE getDates_3(OUT sumINT)    # out参数

  BEGIN

    SET sum = (SELECTcount(*) FROM test);

  END //

CREATEPROCEDURE getDates_4(INOUT i INT)    #inout参数

  BEGIN

    SET i= i + 1;

  END //

DELIMITER;

# 删除存储过程

DROPPROCEDURE IF EXISTS getDates;

# 修改存储过程的特性

ALTERPROCEDURE getDates MODIFIES SQL DATA ;

# 修改存储过程语句(删除再重建)略

# 查看存储过程

SHOWPROCEDURE STATUS LIKE 'getDates';    # 状态

SHOWCREATE PROCEDURE getDates_3;   # 语句

# 调用存储过程

CALLgetDates();

CALLgetDates_2(1);

CALLgetDates_3(@s);

SELECT@s;

SET@i = 1;

CALLgetDates_4(@i);

SELECT@i;    # @i = 2

 

其他语句

# 查看所有的表信息(包括视图)

SHOW TABLE STATUS;

 

其他

# 数据库备份

mysqldump -u root -p db_name >file.sql

mysqldump -u root -p db_name table_name >file.sql

# 数据库还原

mysql -u root -p <C:\file.sql

 

转载自:MySQL基础常见常用语句

嗑着瓜子喝可乐

是今天的英语笔记鸭。(老师说话太快,PPT翻的也快,刷刷狂写,字丑,勿喷,谢谢)

是今天的英语笔记鸭。(老师说话太快,PPT翻的也快,刷刷狂写,字丑,勿喷,谢谢)

陈垆
倒霉孩子的倒霉实验报告

倒霉孩子的倒霉实验报告

倒霉孩子的倒霉实验报告

LOFTER

让兴趣,更有趣

简单随性的记录
丰富多彩的内容
让生活更加充实

下载移动端
关注最新消息